如何将数组的最后一行追加到自身?
类似于:
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 向量用作矩阵,请记住我想进行一些 future 的矩阵计算,例如乘法等。
最佳答案
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)
我们可以通过首先将 x[-1,:]
扩展到 2d 来使用连接
(或附加)。
但一般来说,重复串联是构建数组的一种缓慢方法。
对于列表,像这样重复追加是有效的。但它不适用于数组。一方面,数组没有 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]])
关于python - 如何在 Python 中追加二维数组的最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38470678/