簡體   English   中英

用作numpy.array的附加函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM