python numpy数组追加在.py文件中不起作用,但在终端中起作用

Posted

技术标签:

【中文标题】python numpy数组追加在.py文件中不起作用,但在终端中起作用【英文标题】:python numpy array append not working in .py file, but works in terminal 【发布时间】:2016-09-27 04:42:48 【问题描述】:

我正在尝试使用 np.append 追加到一个 numpy 数组。

例如,

a = np.array([1])

np.append(a, [2])

此代码在终端中运行良好(结果为 array([1, 2])),但当我运行包含其中包含的相同代码的 .py 文件时,它将无法运行。当我在附加 [2] 后打印 a 时,它仍然是 [1]。

这是我的 test.py 文件的代码:

import numpy as np

a = np.array([1])
print(a)
np.append(a, [2])
print(a)

这是用终端运行的结果:

python test.py
[1]
[1]

没有错误的错误结果。 有谁知道可能是什么问题?

【问题讨论】:

【参考方案1】:
import numpy as np
a = np.array([1])
print(a)
a = np.append(a, [2])
print(a)

numpy.append(arr, values, axis=None),其中arr 是将值附加到此数组的副本 (http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.append.html)。

在终端中,您的代码可以正常工作,因为 np.append(a,[2]) 变为 print np.append(a,[2])

【讨论】:

【参考方案2】:

您确定终端中使用的 numpy 版本和执行 .py 文件的版本相同吗?根据http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.append.html np.append in numpy 1.10.0 没有到位,因此与您从python test.py 获得的行为一致

要比较版本,可以打印比较numpy.__version__

【讨论】:

根据this question 的回答,我发现这是因为我没有使用数组的“副本”。在终端中,使用 np.append() 直接产生结果,而在 .py 文件中,np.append() 函数似乎在打印 a 的值之前丢弃(?)结果。这就是我在 test.py 中修复代码的方式,现在它可以工作了:import numpy as np a = np.array([1]) print(a) a = np.append(a, [2]) print(a) np.append 是使用np.concatenate 的另一种方式。它不是,也从来不是,列表追加的克隆。【参考方案3】:

您误解了终端在做什么。当您在终端中编写以下内容时:

>>> a = np.array([1])
>>> np.append(a, [2])
array([1, 2])

您显然没有要求它打印,但它确实要求。所以终端一定已经插入了打印语句。终端实际上​​正在运行:

a = np.array([1])
print repr(np.append(a, [2]))

也就是说,所有不返回None表达式都包裹在print repr(...)

当然你的代码没有插入相同的打印语句,所以它当然会给出不同的结果

【讨论】:

以上是关于python numpy数组追加在.py文件中不起作用,但在终端中起作用的主要内容,如果未能解决你的问题,请参考以下文章

Python函数导入在Django中不起作用

为啥 ./configure 在 python setup.py 中不起作用?

导入在具有多个目录的python中不起作用

追加 Python 3D Numpy 数组

zip_safe = False 在 setup.py 文件中不起作用

Py serial readline在Python3中不起作用