我試圖索引某個矩陣,y
,然後用某個布爾語句重新索引該結果,並將y
中的對應元素設置爲0
。下面顯示了我用來測試這種索引方案的僞代碼。設置索引索引數組時的Numpy數組值
x=np.zeros([5,4])+0.1;
y=x;
print(x)
m=np.array([0,2,3]);
y[0:4,m][y[0:4,m]<0.5]=0;
print(y)
我不確定爲什麼它不起作用。輸出我想:
[[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]]
[[ 0. 0.1 0. 0. ]
[ 0. 0.1 0. 0. ]
[ 0. 0.1 0. 0. ]
[ 0. 0.1 0. 0. ]
[ 0.1 0.1 0.1 0.1]]
但我實際上得到:
[[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]]
[[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]]
我敢肯定,我錯過了一些在引擎蓋細節,解釋了爲什麼這是行不通的。有趣的是,如果您將m
替換爲:
,那麼分配工作。出於某種原因,選擇列的一個子集不會讓我分配零。
如果有人可以解釋發生了什麼,並幫助我找到一種替代解決方案(希望這種解決方案不涉及生成臨時numpy陣列,因爲我的實際y
將會非常巨大),我會非常感激!謝謝!
編輯: y[0:4,:][y[0:4,:]<0.5]=0;
y[0:4,0:3][y[0:4,0:3]<0.5]=0;
等
如預期的所有工作。看起來問題是當你用某種列表進行索引時。
你可能會使用一些隨機數而不是所有的'0.1',像'np.random.rand(5,4)'這樣的輸入,並顯示我們預期的輸出? – Divakar
我最初使用所有隨機數進行測試,這是我最初遇到問題的地方。只是因爲它具有更高的可重複性,我轉而使用所有的「0.1」。 –
你可以在開始時使用'np.random.seed(1234)'來獲得可重複的隨機數。 – Divakar