2014-01-07 60 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.]]) 
相關問題