2014-01-07 61 views
5

我想在python中追加一个向量到矩阵中。我试过appendconcatenate方法,但我没有得到答案。我以前使用Matlab,在那里我用这个:如何在python中追加一个向量到矩阵中

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) 

我怎么能在Python中使用numpy做到这一点?

感谢

+0

你说的是C++或Pyth上? Python没有矢量/数组,它有列表或字典。 – IanAuld

+2

@IanAuld - 他指的是numpy数组。 –

+0

对不起,我在问题文本中添加了numpy。 – Hadi

回答

21

您正在寻找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的人,这是很方便的知道除了vstackhstacknp.r_np.c_

+0

好吧,现在它相当完整 – joojaa

+4

100%正确,但我会劝阻使用'c_'和'r_'通常,他们看起来很奇怪的python代码似乎只存在于mollycoddle用户来自MATLAB。 – wim

+0

@wim - 好点。我当然同意,避免将它们用于将由多人维护的长期代码库通常是一个好主意。但是,它们非常方便用于交互式使用并构建快速序列。我可能不应该把它们推荐给他们,但我发现我无论如何都会比以前更多地使用它们。 –

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.]]) 
相关问题