2015-09-30 57 views
1

我有一個numpy的數組:根據給定列中的值更改一個numpy數組?

array([[ 0.68597575, 0.05544651, -1.  ], 
     [ 0.33494648, 0.46368367, 1.  ], 
     [ 0.42486765, 0.89427025, 1.  ], 
     [ 0.62408611, 0.64633939, 1.  ], 
     [ 0.37087957, 0.53077302, -1.  ], 
     [ 0.21664159, 0.10786084, -1.  ], 
     [ 0.13003626, 0.18425347, -1.  ]]) 

欲具有最後值的行-1到乘以-1以及在實際矩陣代替。

我嘗試這樣做:

def transform(data): 
    for row in data: 
     if row[-1] == -1: 
      row = row * -1 

但我知道會有什麼比這更簡單。

回答

2

您可以通過執行避免for循環:

data[data[:, -1] == -1] *= -1 
1

我喜歡做有兩個原因這兩個步驟:(i)更容易理解的代碼;和(ii)通常在第一步驟中創建的布爾指數可以在數據流水線別處重用

創建選擇行的布爾指數:

idx = M[:,-1] == -1 

做對索引數據變換:

M[idx,] *= -1 
+1

這和我的回答是一樣的...... –

+1

是的 - 看起來你在寫我的時候發佈了你的,這與我的時間差異相符(〜3分鐘,在那3分鐘內將我的答案分成兩行,並添加一些評論以使其更容易明白) – doug

相關問題