我創建了 2D 陣列,并使用 2 個 bool 索引陣列進行了布爾索引。第一個用于軸 0,下一個用于軸 1。
我希望像 Pandas 一樣選擇每個軸上的 True 和 True 交叉值。但結果不是。
我想知道下面的代碼是如何作業的。我想從官方 numpy 站點獲取描述此問題的鏈接。
提前致謝。
a = np.arange(9).reshape(3,3)
a
----------------------------
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
a[ [True, False, True], [True, False, True] ]
--------------------------
array([0, 8])
我的期望是[0, 6, 2, 8]。(我知道如何得到我期望的結果。)
uj5u.com熱心網友回復:
In [20]: a = np.arange(9).reshape(3,3)
如果將串列傳遞給ix_,則結果是 2 個可用于broadcasting索引所需塊的陣列:
In [21]: np.ix_([True, False, True], [True, False, True] )
Out[21]:
(array([[0],
[2]]),
array([[0, 2]]))
In [22]: a[_]
Out[22]:
array([[0, 2],
[6, 8]])
這不是 1d,但很容易弄亂。
嘗試制作等效的布爾陣列不起作用:
In [23]: a[[[True], [False], [True]], [True, False, True]]
Traceback (most recent call last):
File "<ipython-input-23-26bc93cfc53a>", line 1, in <module>
a[[[True], [False], [True]], [True, False, True]]
IndexError: too many indices for array: array is 2-dimensional, but 3 were indexed
布爾索引必須是 1d 或 nd 匹配目標,這里是 (3,3)。
In [26]: np.array([True, False, True])[:,None]& np.array([True, False, True])
Out[26]:
array([[ True, False, True],
[False, False, False],
[ True, False, True]])
uj5u.com熱心網友回復:
你想要的是連續的切片: a[[True, False, True]][:,[True, False, True]]
a = np.arange(9).reshape(3,3)
x = [True, False, True]
y = [True, False, True]
a[x][:,y]
作為平面陣列
a[[True, False, True]][:,[True, False, True]].flatten(order='F')
輸出: array([0, 6, 2, 8])
選擇
注意。這需要用于切片的陣列
a = np.arange(9).reshape(3,3)
x = np.array([False, False, True])
y = np.array([True, False, True])
a.T[x&y[:,None]]
輸出: array([0, 6, 2, 8])
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/350883.html
