我需要使用索引矩阵iM
从n维矩阵中获取一些元素。但是这个n
是未知的。
是否有可能灵活地执行以下操作:
if n == 1:
value = M[iM[:]] # orM[iM[:, 0]]
elif n == 2:
value = M[iM[:, 0], iM[:, 1]]
elif n == 3:
value = M[iM[:, 0], iM[:, 1], iM[:, 2]]
更新: 这可以这样做:
value = M[[(iM[:, i]) for i in range(0, n)]]
答案 0 :(得分:1)
您可以使用明确list
(或例如tuple
)构造函数生成单个指标列表,因为这会自动将元素放入不同的列表中:
M[list(iM.T)] # or e.g. M[tuple(iM.T)]
由于列表的创建方式(逐行)和索引矩阵的布局(您希望逐列获取标记),索引矩阵iM
需要转置(iM.T
)在变成列表之前。