2016-12-24 39 views
-4

什麼是[:]在這個程序中的角色:作用[:]在numpy的

import numpy as np 
l=np.array([[0,0,0,0], 
      [4,5,6,7], 
      [7,8,9,8]]) 
out[:]=np.nanstd(l, axis=0) 
print(out) 

如果我寫的代碼就是這樣的(即沒有0​​)的第三行:

out=np.nanstd(l, axis=0) 

我會得到相同的結果。所以,[:]的作用是什麼以及它在什麼情況下有所作爲?

+1

首先,你的代碼將引發NameError,因爲'out'沒有定義。其次,第三行的「替代」與第一個示例中的「替代」相同。 – BrenBarn

+0

@BernBarn我在Jupyter中運行代碼,沒有錯誤。我得到結果數組:[2.86744176 3.29983165 3.74165739 3.55902608]。我編輯了這個錯字。 – Javad

+0

這是一個不好的'duplicate' – hpaulj

回答

1

一個Jupyter/ipython會議上維持一個Out字典包含的歷史。但Out[:]會給出錯誤。

在一個新的會話,這將產生一個錯誤:

In [731]: out[:]=np.array([1,2,3]) 
.... 
NameError: name 'out' is not defined 

但如果我先創建一個out,該out[:]語法工作

In [732]: out=np.array([1,2,3]) 
In [733]: out 
Out[733]: array([1, 2, 3]) 
In [734]: out[:]=np.array([4,5,6]) 
In [735]: out 
Out[735]: array([4, 5, 6]) 

首先創建一個out變量,在這種情況下,作爲一個數組。第二個用新的替換out中的值。替換中的值的數量必須與原件的形狀相匹配。

如果out最初(或重新定義)爲一個列表,[:]指派也起作用,將所有值替換爲新值(不必匹配)。

In [736]: out=[1,2,3] 
In [737]: out[:]=[4,5] 
In [738]: out 
Out[738]: [4, 5] 

與列表out=...out[:]=...十分相似,我們不得不看看id(out)之前和之後才能注意到差別。

但基本一點是out = ...分配一個新對象到變量。 out[:] = ...將新值分配給現有對象。第二種情況下的確切動作取決於該對象的類別。