2014-07-07 123 views
0

我想通過以下方式來初始化numpy的陣列的列表初始化numpy的數組列表

import numpy as np 
sol=[np.zeros(5)]*4 

但是,當我嘗試修改列表成員像這樣的一個,

sol[0][2:4]=[1,1] 

它改變了所有列表成員,而不是隻有第一個

[array([ 0., 0., 1., 1., 0.]), array([ 0., 0., 1., 1., 0.]), array([ 0., 0., 1., 1., 0.]), array([ 0., 0., 1., 1., 0.])] 

我想這是關於可變和不可變對象的舊故事s,但我根本不知道如何解決它。

我試過使用copy和deepcopy,但沒有成功。

很抱歉,如果它被複制項,但我找不到任何類似的問題

感謝

+1

您需要創建*一個單獨的'array' *每次:'溶膠= [np.zeros(5) _範圍(4)]' – jonrsharpe

回答

1

答案是:

np.zeros((4, 5)) 

,並解釋有關可變對象的地步。當你這樣做:

[np.zeros(5)] * 4 

它的功能與此等價的:

a = np.zeros(5) 
[a, a, a, a] 
+1

該死的!我想我很累。感謝可變的解釋。 – manolius

+1

記住你總是可以用'id'函數檢查一個對象的id。如果這些數字相同,那麼它是同一個對象。 – acushner