numpy中灵活的n维索引

时间:2018-02-28 15:20:18

标签: python numpy

我需要使用索引矩阵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)]]

1 个答案:

答案 0 :(得分:1)

您可以使用明确list(或例如tuple)构造函数生成单个指标列表,因为这会自动将元素放入不同的列表中:

M[list(iM.T)] # or e.g. M[tuple(iM.T)]

由于列表的创建方式(逐行)和索引矩阵的布局(您希望逐列获取标记),索引矩阵iM需要转置(iM.T)在变成列表之前。