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文件中不起作用,但在终端中起作用的主要内容,如果未能解决你的问题,请参考以下文章
为啥 ./configure 在 python setup.py 中不起作用?