2011-07-25 47 views
2

我試圖同時更改數組的非相鄰值,並且它似乎沒有工作。嘗試下面的示例,代碼不會中斷,但值不會更改。我使用recarrays遇到了同樣的問題。有沒有人遇到過這個?有什麼想法嗎?例如:使用陣列或rec陣列操縱python中的非相鄰單元

import numpy as np 

simulants = np.zeros([10, 5]) 

simulants[:, 4] =np.array([5,25, 10, 5, 45, 30, 60, 1, 80, 80]) 

simulants[simulants[:,4]==5][:,0]=np.array([1, 2]) 
+0

非常感謝您的幫助,這個工作,是關於信息爲什麼。 – mike

回答

3

索引的順序可能很重要。嘗試:

simulants[:,0][simulants[:,4]==5]=np.array([1,2]) 

爲什麼爲了重要的是,因爲simulants[:,0]一種觀點的理由,而 simulants[simulants[:,4]==5]是數組(子)複印件。 (修改陣列的視圖會修改底層陣列,修改副本不會)

simulants[:,0]是一個視圖,因爲它使用了basic slicingsimulants[simulants[:,4]==5]是一個副本,因爲它使用了一個觸發advanced indexing的bool ndarray。


編輯:作爲@eryksun在評論中指出,分配可以更好地與一個單一的指標來處理:

simulants[simulants[:,4]==5, 0] = np.array([1,2] 
+0

@eryksun:真的!我忘記了簡單的解決方案:)。 – unutbu