Python Numpy教程-布尔索引
阅读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 =
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]])