2013-09-29 40 views
2

假設我定義一個2×2矩陣使用numpy的:我該如何合併在Python 2列

array([[1, 2], 
     [2, 3]]) 

現在其他的2×1矩陣:

array([[3], 
     [4]]) 

我如何通過串聯這兩個矩陣列,所以它會變成:

array([[1, 2, 3], 
     [2, 3, 4]]) 

而我該如何刪除指定列,以便它將成爲

array([[1], 
     [2]]) 

回答

4

有一個numpy.concatenatemethod

import numpy as np 
np.concatenate([ np.array([ [1,2], [2,3] ]), np.array([ [3],[4] ]) ] , axis = 1) 

或簡單地使用hstackvstack

np.hstack([ np.array([ [1,2], [2,3] ]), np.array([ [3],[4] ]) ]) 

這些也可以用於除去塔(連接兩個子陣列) - 這可以是用於刪除多列。

要刪除第i列,您可​​以將子排列陣列添加到此列,並從下一列開始,並將它們連接起來。例如,以除去第二塔(索引1):

a - np.array([ [1,2,3], [2,3,4] ]) 
a1= a[:,:1] 
a2= a[:,2:] 
np.hstack([a1,a2]) 

所以一般

def remove_column(a, i): 
    return np.hstack([a[:,:i], a[:,(i+1):] ]) 

然後

>>> remove_column(a, 1) 
array([[1, 3], 
     [2, 4]]) 
>>> remove_column(a, 0) 
array([[2, 3], 
     [3, 4]]) 

其實,在註釋中指出 - numpy的實現其自己delete方法

np.delete(a, 1, 1) 

刪除第二列

和刪除多個的可使用

np.delete(a, [column1, columne2, ..., columnK], 1) 

第三個參數是在軸描述符,0將意味着行,1列來執行,None flatterns整個陣列

+0

它報告錯誤:ValueError異常:所有除級聯軸輸入數組尺寸必須匹配錯字恰好 – liumilan

+0

抱歉,應該是'軸= 1 ' – lejlot

+0

thanks.Now添加列使用hstack working.But我仍然迷惑與刪除指定的列,你能給更多的細節 – liumilan

1

您可以使用numpy.hstack

>>> import numpy as np 
>>> a = np.array([[1,2], [2,3]]) 
>>> b = np.array([[3], [4]]) 
>>> np.hstack((a,b)) 
array([[1, 2, 3], 
     [2, 3, 4]]) 

卸下是更加簡單,只要切開:

>>> c = a[:,:1] 
array([[1], 
     [2]]) 
-1
In [3]: x = np.array([[1, 2], [2, 3]] 
In [4]: y = np.array([[3], [4]]) 
In [9]: z = np.hstack([x, y]) 

In [10]: z 
Out[10]: 
array([[1, 2, 3], 
     [2, 3, 4]]) 

In [11]: z[:,:1] 
array([[1], 
     [2]])