如何在python中将向量追加到矩阵中

时间:2014-01-07 18:10:23

标签: python arrays numpy

我想在python中将一个向量追加到矩阵中。我尝试了appendconcatenate方法,但我没有得到答案。我以前和Matlab一起工作过,我用过这个:

  m = zeros(10,4) % define my matrix, 10x4
  v = ones(10,1) % my vecto, 10x1
  c = [m,v] % so simple! the result is: 10x5 (the vector added as the last column)

如何使用numpy在python中执行此操作?

感谢

2 个答案:

答案 0 :(得分:25)

您正在寻找np.r_np.c_。 (想想“列堆栈”和“行堆栈”(它们也是函数),但是使用matlab样式的范围生成。)

另请参阅np.concatenatenp.vstacknp.hstacknp.dstacknp.row_stacknp.column_stack等。

例如:

import numpy as np
m = np.zeros((10, 4))
v = np.ones((10, 1))
c = np.c_[m, v]

收率:

array([[ 0.,  0.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  0.,  1.]])

这也相当于np.hstack([m, v])np.column_stack([m, v])

如果您不是来自matlab,hstackcolumn_stack似乎更具可读性和描述性。 (出于这个原因,他们在这种情况下可以说是更好的。)

但是,np.c_np.r_具有来自matlab的人们期望的附加功能。例如:

In [7]: np.r_[1:5, 2]
Out[7]: array([1, 2, 3, 4, 2])

或者:

In [8]: np.c_[m, 0:10]
Out[8]:
array([[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  0.,  2.],
       [ 0.,  0.,  0.,  0.,  3.],
       [ 0.,  0.,  0.,  0.,  4.],
       [ 0.,  0.,  0.,  0.,  5.],
       [ 0.,  0.,  0.,  0.,  6.],
       [ 0.,  0.,  0.,  0.,  7.],
       [ 0.,  0.,  0.,  0.,  8.],
       [ 0.,  0.,  0.,  0.,  9.]])

无论如何,对于matlab人来说,除了np.r_np.c_等之外,了解vstackhstack也很方便。

答案 1 :(得分:4)

在numpy中它是相似的:

>>> m=np.zeros((10,4))
>>> m
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])
>>> v=np.ones((10,1))
>>> v
array([[ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.],
       [ 1.]])

>>> np.c_[m,v]
array([[ 0.,  0.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  0.,  1.]])