如何将数组的最后一行追加到自身?
类似的东西:
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矢量作为矩阵,记住我想做一些未来的矩阵计算,如乘法等。
答案 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]])