2013-09-29 33 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]])