4

假设我使用 numpy 定义了一个 2x2 矩阵:

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

现在另一个 2x1 矩阵:

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

如何按列连接这两个矩阵,使其变为:

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

以及我怎样才能删除指定列,使其成为

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

3 回答 3

7

有一种numpy.concatenate 方法

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展平整个数组

于 2013-09-29T10:47:32.653 回答
3

您可以使用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]])
于 2013-09-29T10:49:50.833 回答
0
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]])
于 2013-09-29T10:52:07.893 回答