亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Numpy中通過邏輯索引獲取矩陣的網格

在Numpy中通過邏輯索引獲取矩陣的網格

冉冉說 2021-03-29 19:11:27
我正在嘗試使用最初在MATLAB中的numpy重寫函數。在MATLAB中有一個邏輯索引部分,如下所示:X = reshape(1:16, 4, 4).';idx = [true, false, false, true];X(idx, idx)ans =     1     4    13    16當我嘗試以numpy進行索引時,無法獲得正確的索引:X = np.arange(1, 17).reshape(4, 4)idx = [True, False, False, True] X[idx, idx]# Output: array([6, 1, 1, 6])通過邏輯索引從矩陣中獲取網格的正確方法是什么?
查看完整描述

3 回答

?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

您還可以編寫:


>>> X[np.ix_(idx,idx)]

array([[ 1,  4],

       [13, 16]])


查看完整回答
反對 回復 2021-04-06
?
動漫人物

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]])


查看完整回答
反對 回復 2021-04-06
?
達令說

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的工作方式相同。


查看完整回答
反對 回復 2021-04-06
  • 3 回答
  • 0 關注
  • 212 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號