使用布尔数组建立索引

问题描述 投票:0回答:2
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是怎么回事

python numpy numpy-ndarray numpy-slicing
2个回答
1
投票

显然您希望看到array([[ 4, 6],[ 8, 10]])

在布尔索引中,NumPy仅返回对角线元素,如here所述:

没有np.ix_调用,将仅选择对角线元素(...)。对于使用多个高级索引建立索引,这一差异是要记住的最重要的事情。

对于所需的输出,使用np.ix_()

a[np.ix_(b1,b2)]

0
投票
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。

这是我的理解。对不起,我的英语不好。

© www.soinside.com 2019 - 2024. All rights reserved.