如何在Python中追加2D数组的最后一行

时间:2016-07-20 00:48:04

标签: python numpy

如何将数组的最后一行追加到自身?

类似的东西:

x= np.array([(1,2,3,4,5)])
x= np.append(x, x[0], 1)

另外,你能解释为什么这种使用向量的方法会产生错误吗?

for i in range(3):
    x.append(0)

x
[0, 0, 0]

x= np.append(x, x[0],0) 

使用矢量哪种方式最好?我正在尝试使用2D矢量作为矩阵,记住我想做一些未来的矩阵计算,如乘法等。

3 个答案:

答案 0 :(得分:2)

In [3]: x=np.array([(1,2,3,4,5)])
In [4]: x
Out[4]: array([[1, 2, 3, 4, 5]])
In [5]: x=np.append(x,x[0],1)
...
ValueError: all the input arrays must have same number of dimensions

x是(1,5),x[0]是(5,) - 一个是2d,另一个是1d。

In [11]: x=np.vstack([x,x[0]])
In [12]: x
Out[12]: 
array([[1, 2, 3, 4, 5],
       [1, 2, 3, 4, 5]])

这是有效的,因为vstack会将x[0]更改为2d,例如(1,5),所以它可以与x连接。

In [16]: x=np.concatenate([x, np.atleast_2d(x[-1,:])])
In [17]: x.shape
Out[17]: (3, 5)

我们可以先concatenate扩展到{2}来使用x[-1,:](或追加)。

但总的来说,重复连接是构建数组的一种缓慢方法。

对于列表,重复追加这样的效果。但它不适用于数组。首先,数组没有append方法。 np.append函数返回一个新数组。它不会改变x

In [19]: z=[]
In [20]: for i in range(3):
    ...:     z.append(0)
    ...:     
In [21]: z
Out[21]: [0, 0, 0]

重复附加到列表是好的。重复附加到数组很慢。

In [25]: z=[]
In [26]: for i in range(3):
    ...:     z.append(list(range(i,i+4)))

In [27]: z
Out[27]: [[0, 1, 2, 3], [1, 2, 3, 4], [2, 3, 4, 5]]
In [28]: np.array(z)
Out[28]: 
array([[0, 1, 2, 3],
       [1, 2, 3, 4],
       [2, 3, 4, 5]])

答案 1 :(得分:1)

>>> np.append(x,x[-1:],0)
array([[1, 2, 3, 4, 5],
       [1, 2, 3, 4, 5]])

答案 2 :(得分:0)

这个怎么样:

np.append(arr=x, values=x[-1,None], axis=0)
#array([[1, 2, 3, 4, 5],
#       [1, 2, 3, 4, 5]])