Python Numpy教程-布尔索引

Python Numpy教程-布尔索引,python,numpy,Python,Numpy,阅读Numpy快速教程,我无法理解这句话 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])而不是数组([4,6],[8,10]])?这是因为你在那里表演 在内部,从布尔数组计算索引- In [72]: idx1 =

阅读Numpy快速教程,我无法理解这句话

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])
而不是
数组([4,6],[8,10]])

这是因为你在那里表演

在内部,从布尔数组计算索引-

In [72]: idx1 = np.flatnonzero(b1)

In [73]: idx2 = np.flatnonzero(b2)

In [75]: idx1
Out[75]: array([1, 2])

In [76]: idx2
Out[76]: array([0, 2])
然后,使用索引数组中的每个元素对每组索引执行整数数组索引-

In [77]: a[1,0] # 1 from idx1[0], 0 from idx2[0]
Out[77]: 4

In [78]: a[2,2] # 2 from idx1[1], 2 from idx2[1]
Out[78]: 10

为了实现MATLAB风格的块提取,我们需要使用开放数组并索引到每个轴/DIM中。要在NumPy中创建这样的开放阵列,我们需要-


如果JeongYeojin解决了你的问题,考虑通过点击解决方案旁边的空心蜱来接受它,这里有更多的信息。
In [89]: np.ix_(b1,b2)
Out[89]: 
(array([[1],
        [2]]), array([[0, 2]]))

In [90]: a[np.ix_(b1,b2)]
Out[90]: 
array([[ 4,  6],
       [ 8, 10]])