a = np.arange(12).reshape(3,4)
b1 = np.array([False,True,True]
b2 = np.array([True,False,True,False])
a[b1,b2]
输出:
array([4,10])
我不知道a [b1,b2]中的4和10是怎么回事
显然您希望看到array([[ 4, 6],[ 8, 10]])
。
在布尔索引中,NumPy仅返回对角线元素,如here所述:
没有
np.ix_
调用,将仅选择对角线元素(...)。对于使用多个高级索引建立索引,这一差异是要记住的最重要的事情。
对于所需的输出,使用np.ix_()
:
a[np.ix_(b1,b2)]
import numpy as np
a = np.arange(12).reshape(3, 4)
b1 = np.array([False,True,True])
b2 = np.array([True,False,True,False])
print(a)
print(a[b1, b2])
[第一件事是您已经排列了12个数组元素,它们从0开始,以1步进,以12停止。然后,您已经用3行4列重塑了数组元素。看起来如下:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
然后最后用行和列打印数组元素,因为该数组是二维数组,它具有行和列。\b1代表具有三行的元素的行,并且第一行(row [0])为False。第二行(row [1])为True。...最后一行(row [2])为True。b2还表示具有4列的数组的列。第一列(column [0])为True ...第三列(column [2])为True。最后是假。然后,当我们想返回二维数组的输出时,我们使用数组名(a [b1,b2]),b1和b2是行索引和列索引。
第二行和第一列变为True。因此返回4。其他为False。第三行和第三列也变为True。因此,它返回10。其他为False。
这是我的理解。对不起,我的英语不好。