我有一个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]]
答案 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]])