首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数,作为numpy.array的附加函数。

函数,作为numpy.array的附加函数。
EN

Stack Overflow用户
提问于 2015-02-14 13:11:02
回答 1查看 463关注 0票数 0

如何编写像array.append()这样的用于numpy.array的函数?

我试过这个

代码语言:javascript
复制
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':

代码语言:javascript
复制
[5 6]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-14 13:13:38

“这就像array.append()”

首先,这里您最可能提到的Python中的数据结构称为"array“,称为"list”。

然后,Python和Numpy数组的append()方法的行为从根本上不同。假设l是Python。l.append()修改该列表并返回None。相反,Numpy的数组的append()方法不会改变它所操作的数组。它返回一个新的数组对象。

请参阅:http://docs.scipy.org/doc/numpy/reference/generated/numpy.append.html

具有附加于轴的值的arr的副本。请注意,追加未发生:分配并填充了一个新数组。

这解释了为什么需要返回append_np()函数的结果并分配返回值,就像在new_z = append_np(z, 7)中一样。

您可能已经将此函数用于Python列表:

代码语言:javascript
复制
def append(ar, el):
    ar = ar.append(el)

并这样称呼它:

代码语言:javascript
复制
z = [1, 2]
append(z, 7)
print z

你已经看到它确实修改了你的z。但是,为什么,这个函数发生了什么呢?作为第一个参数传递的对象(绑定到名称ar)被就地修改。这就是为什么z“在外部”发生变化的原因。你在不知情的情况下利用了这个函数的副作用,这是危险的。在函数中,名称ar被重新分配给None单例对象(它是列表追加方法的返回值)。您没有返回或使用此对象,因此此分配在您的程序中没有任何用途。您自己发现这种方法是有问题的,因为当您将函数重新构造为append_np()时,您突然意识到它对z没有“副作用”。

也就是说,对于Python列表,您不会将追加操作外包到另一个函数中。从一开始你就会说:

代码语言:javascript
复制
z = [1, 2]
z.append(7)
print z
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28515965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档