使用布尔向量来提取ndarray的子​​数组

时间:2017-03-28 03:38:25

标签: python numpy indexing boolean slice

我有一个ndarray:

ndaM = np.array([[1,2,3],[4,5,6],[7,8,9]]);

和0和1的向量:

vSet = [0,1,1];

如何使用vSet仅在vSet中使用索引为非零的行和列提取子矩阵?在这种情况下,矩阵

[[5,6],[8,9]]

2 个答案:

答案 0 :(得分:2)

这是一个使用np.ix_

一次切片的解决方案
ndaM[np.ix_(*2*(np.array(vSet, bool),))]
# array([[5, 6],
#        [8, 9]])

或者更易阅读两行

mask = np.array(vSet, bool)
ndaM[np.ix_(mask, mask)]

答案 1 :(得分:1)

你可以采用两步切片:

# convert vSet to a boolean array
bSet = np.array(vSet).astype(bool)

# slice in two steps, rows first, then columns
ndaM[bSet][:, bSet]

#array([[5, 6],
#       [8, 9]])

或使用np.ix_创建索引网格网格,然后将其用于索引:

ndaM[np.ix_(bSet, bSet)]
#array([[5, 6],
#       [8, 9]])