3 回答

TA貢獻1815條經驗 獲得超10個贊
In [1]: X = np.arange(1, 17).reshape(4, 4)
In [2]: idx = np.array([True, False, False, True]) # note that here idx has to
# be an array (not a list)
# or boolean values will be
# interpreted as integers
In [3]: X[idx][:,idx]
Out[3]:
array([[ 1, 4],
[13, 16]])

TA貢獻1821條經驗 獲得超6個贊
在numpy此稱為fancy indexing。要獲得您想要的項目,您應該使用2D索引數組。
您可以使用outer來從1D中idx創建適當2D的索引數組。當應用于兩個序列時,外部函數1D會將一個序列的每個元素與另一個序列的每個元素進行比較?;仡橳rue*True=True和False*True=False,與np.multiply.outer()相同np.outer(),可以為您提供2D索引:
idx_2D = np.outer(idx,idx)
#array([[ True, False, False, True],
# [False, False, False, False],
# [False, False, False, False],
# [ True, False, False, True]], dtype=bool)
您可以使用:
x[ idx_2D ]
array([ 1, 4, 13, 16])
在您的真實代碼中,您可以使用x=[np.outer(idx,idx)]它,但是它不節省內存,其工作方式與del idx_2D完成切片后添加a的工作方式相同。
添加回答
舉報