![](/img/trans.png)
[英]Append a numpy.array to a certain numpy.array stored in a list
[英]Function that works as append for numpy.array
如何為numpy.array編寫類似於array.append()的函數?
我已經試過了
import numpy as np
def append_np(ar, el):
ar = np.append(ar, el)
z = np.array([5], dtype='int32')
z = np.append(z, 6)
append_np(z, 7)
print z
但是此代碼僅附加“ 6”:
[5 6]
“像array.append()一樣工作”
首先,您很可能在這里將其稱為“數組”的Python數據結構稱為“列表”。
然后,Python列表和Numpy數組的append()
方法的行為根本不同。 假設l
是一個Python列表。 l.append()
修改列表並返回None
。 相反,用於數組的Numpy的append()
方法不會更改其操作的數組。 它返回一個新的數組對象。
請參閱: http : //docs.scipy.org/doc/numpy/reference/generated/numpy.append.html
arr的副本,其值附加到axis。 請注意,append不會就地發生:分配並填充了一個新數組。
這解釋了為什么您需要返回 append_np()
函數的結果並分配返回值,如new_z = append_np(z, 7)
。
您可能已將此功能用於Python列表:
def append(ar, el):
ar = ar.append(el)
並這樣稱呼它:
z = [1, 2]
append(z, 7)
print z
而且您已經看到它確實修改了z
。 但是,為什么,此功能發生了什么呢? 作為第一個參數(綁定到名稱ar
)傳遞的對象已就地修改。 這就是z
“在外部”發生變化的原因。 您在不知情的情況下利用了此功能的副作用,這很危險。 在函數中,將名稱ar
重新分配給None
單例對象(這是列表append方法的返回值)。 您沒有返回或使用此對象,因此此分配在程序中沒有任何作用。 您發現自己這種方法是有問題的,因為當您將函數重新構造為append_np()
您突然意識到它對z
沒有“副作用”。
也就是說,對於Python列表,您不會將append操作外包給另一個函數。 您從一開始就應該聲明:
z = [1, 2]
z.append(7)
print z
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.