python - 如何在 Python 中追加二维数组的最后一行

标签 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 向量用作矩阵,请记住我想进行一些 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]])

这是有效的,因为 vstackx[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/

相关文章:

python - 从任何(不安全)字符串创建(正常/安全)应用程序包标识符

python - Fabric:在目标主机上执行内联 Python?

python - 在 Python (PIL) 中确定 JPG 质量

python - 测试 Pandas 列是否为 datetime 类型

python - beautifulsoup - 删除一行代码

python - 如何拆分字符串并形成多级嵌套字典?

python - Numpy loadtxt 四舍五入数字

numpy - 创建二维数组并填充 numpy 中每行的第一列

python - 阻止 Python enumerate() 将字符串拆分为字符

python - 在数组中选择 N 个均匀间隔的元素,包括第一个和最后一个