X[mask1, mask2]
是Boolean Array Indexing Doc作爲
In [249]: X[mask1.nonzero()[0], mask2.nonzero()[0]]
Out[249]: array([1, 5])
In [250]: X[[0,1], [0,1]]
Out[250]: array([1, 5])
相當於實際上,這是給你X[0,0]
和X[1,1]
(配對的0和1)描述。
你要代替的是:
In [251]: X[[[0],[1]], [0,1]]
Out[251]:
array([[1, 2],
[4, 5]])
np.ix_
是創建尺寸
In [258]: np.ix_([0,1],[0,1])
Out[258]:
(array([[0],
[1]]), array([[0, 1]]))
In [259]: X[np.ix_([0,1],[0,1])]
Out[259]:
array([[1, 2],
[4, 5]])
的正確組合便利的工具,有效的爲第1軸和行向量的列向量其次,共同定義所需的矩形值。
但是試圖廣播這樣布爾數組不起作用:X[mask1[:,None], mask2]
但是,基準區間表示:
組合多個布爾索引陣列或布爾與的整數的索引陣列可最好地理解與obj.nonzero()類比。函數ix_也支持布爾數組,並且毫無意外地工作。
In [260]: X[np.ix_(mask1, mask2)]
Out[260]:
array([[1, 2],
[4, 5]])
In [261]: np.ix_(mask1, mask2)
Out[261]:
(array([[0],
[1]], dtype=int32), array([[0, 1]], dtype=int32))
的ix_
布爾部分:
if issubdtype(new.dtype, _nx.bool_):
new, = new.nonzero()
因此,它與像X[np.ix_(mask1, [0,2])]
高級索引混合不工作,你認爲它的工作方式。請參閱http://stackoverflow.com/questions/30609734/numpy-ndarray-advanced-indexing/30609884#30609884瞭解大部分情況,除了使用整數數組而非布爾數組。 – user2357112
另請參閱[索引文檔](https://docs.scipy.org/doc/numpy/user/basics.indexing.html),瞭解NumPy索引工作原理的全部細節(減去幾個奇怪的,未記錄的大多數案例爲了向後兼容)。 – user2357112