追加用于不同版本的scipy

时间:2017-11-02 04:06:46

标签: python scipy append

我对scipy的不同版本中的追加功能有疑问。如果我在Python 2.7.3和scipy 0.10.1(numpy1.6.2)中使用了以下脚本,那么一切都很顺利。

a=(1,2,3);b=(4,5,6);append(a,b,1);array([1,2,3,4,5,6])
a=[];b=(4,5,6);append(a,b,1);array([4,5,6])

但是如果我在python2.7和scipy1.0.0(numpy 1.13.3)中运行它们:

a=(1,2,3);b=(4,5,6);append(a,b,1);
a=[];b=(4,5,6);append(a,b,1);

追踪(最近一次呼叫最后一次):

  

文件"",第1行,在文件中   "/usr/local/lib/python2.7/site-packages/numpy/lib/function_base.py",   第5152行,附后       return concatenate((arr, values), axis=axis) numpy.core._internal.AxisError:轴1超出数组的范围   维度1

但是我已经检查了function_base.py中append的功能,它们在两个版本的numpy中是相同的。你们知道为什么会这样吗?

另一个问题是,如果我使用的是python2.7,我可以使用python2.6下安装的旧版scipy / numpy吗?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

格式化已关闭,但这是我对你做什么的猜测

a=(1,2,3)
b=(4,5,6)
append(a,b,1)
# array([1,2,3,4,5,6])

ab是元组。

如果我使用np.append功能:

In [566]: np.append(a,b)
Out[566]: array([1, 2, 3, 4, 5, 6])

使用axis=0这也有效;使用axis=1我收到错误,因为a只有一个维度。如果较旧版本的np.appendaxis=1一起使用,那是因为存在错误而忽略了轴参数。 (较新的版本是正确的;您不应该尝试使用旧版本只允许axis=1。)

我使用的是import numpy as np,而不是from numpy import *。这样,当我使用numpy函数时就很清楚了。 (numpy也是scipy的基础)。

我们应该做的是:

In [569]: np.concatenate((a,b))
Out[569]: array([1, 2, 3, 4, 5, 6])

这会将ab转换为1d数组,然后沿着唯一的轴连接它们,以创建一个新数组。

如果a为空列表,则同样有效:

a=[]
b=(4,5,6)
append(a,b,1)
# array([4,5,6])

a是一个列表,并且具有append方法

In [570]: a=[]
In [571]: a.append(b)
In [572]: a
Out[572]: [(4, 5, 6)]

extend

In [573]: a=[]
In [574]: a.extend(b)
In [575]: a
Out[575]: [4, 5, 6]

远离np.append。它总是让初学者感到困惑。坚持使用列表追加,np.concatenate

np.appendnp.stack对于加入数组(或列表)也很有用。

迭代创建数组时,最好附加到列表并在最后创建数组:

alist = []
for i in range(5):
   alist.append(i)
arr = np.array(alist)

重复列表追加是一种很好的做法。重复数组连接速度较慢。