3 回答

TA贡献1815条经验 获得超10个赞
In [1]: X = np.arange(1, 17).reshape(4, 4)
In [2]: idx = np.array([True, False, False, True]) # note that here idx has to
# be an array (not a list)
# or boolean values will be
# interpreted as integers
In [3]: X[idx][:,idx]
Out[3]:
array([[ 1, 4],
[13, 16]])

TA贡献1821条经验 获得超6个赞
在numpy此称为fancy indexing。要获得您想要的项目,您应该使用2D索引数组。
您可以使用outer来从1D中idx创建适当2D的索引数组。当应用于两个序列时,外部函数1D会将一个序列的每个元素与另一个序列的每个元素进行比较。回顾True*True=True和False*True=False,与np.multiply.outer()相同np.outer(),可以为您提供2D索引:
idx_2D = np.outer(idx,idx)
#array([[ True, False, False, True],
# [False, False, False, False],
# [False, False, False, False],
# [ True, False, False, True]], dtype=bool)
您可以使用:
x[ idx_2D ]
array([ 1, 4, 13, 16])
在您的真实代码中,您可以使用x=[np.outer(idx,idx)]它,但是它不节省内存,其工作方式与del idx_2D完成切片后添加a的工作方式相同。
添加回答
举报