正如doctor 指出的那样,这是一件很奇怪的事情.
In practice, you would use different methods for each of the results that you want.
(见下文)
正如@Michael在 comments 中指出的那样,传递两个布尔数组会首先将它们转换为索引号:
a[b1, b2]
|
V
a[np.flatnonzero(b1), np.flatnonzero(b2)]
|
V
a[(array([1, 2]), array([0, 2]))]
也许它是以这种方式实现的(而不是a[np.ix_(b1, b2)]
),类似于只有一个数组用于索引.例如,当您简单地执行a[b1]
时,这可能发生在内部:a[np.flatnonzero(b1)]
.
对于多于1个的数组,这只是一个相同的机械师.
1.要获得预期yields ,请执行以下操作:
请参见this answer.在您的情况下,它将是:
a[b1][:, b2]
产
array([[ 4, 6],
[ 8, 10]])
然后你就可以.flatten()
:
array([ 4, 6, 8, 10])
Or:个
您可以使用np.ix_
:
np.ix_(b1, b2)
产 a tuple of arrays:
(array([[1],
[2]]),
array([[0, 2]]))
可以用来获得相同的结果:
a[np.ix_(b1, b2)].flatten()
2. To get array([ 4, 10])
in a non-weird way:
明确使用integer array indexing:
a[[1, 2], [0, 2]]