2017-07-17 106 views
2

我很困惑,爲什麼以下兩個print(an_array)陳述給出了兩個不同的結果。蟒蛇np.array值變化

雖然b_slice期間 分配被明確定義爲np.array,既a_sliceb_slice是使用type command.Yet a-slice將改變的an_arrayb_slice不會值的相同類型的。如果有人能指出我的解釋,我將不勝感激。

an_array = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]]) 
a_slice = an_array[:2, 1:3] 
print(type(a_slice)) # <class 'numpy.ndarray'> 
print(type(b_slice)) # <class 'numpy.ndarray'> 
b_slice = np.array(an_array[:2, 1:3] 
b_slice[0,0] = 2000 
print(an_array) # returns no change to an_array 

[[1 2 3 4] 
[5 6 7 8] 
[9 10 11 12]] 

a_slice[0,0] = 2000 
print(an_array) # shows the change from the number 2 to the number 2000 

[[1 2000 3 4] 
[5 6 7 8] 
[9 10 11 12] 

回答

3

因爲你明確*通過調用np.array構造函數創建一個副本:

b_slice = np.array(an_array[:2, 1:3]) 

鑑於:

a_slice = an_array[:2, 1:3] 

是片的結果,這在numpycreate views而不是淺不同於香草名單的副本。

注意 *爲@hpaulj指出,np.array構造函數接受一個copy參數,默認爲True

+2

'np.array'採用'copy'參數,默認爲'True'。 – hpaulj

+0

@hpaulj好點。我會將這些信息添加到問題中。 –

+0

感謝您的回覆。我現在知道了。你一直在幫助很大。 – Mark