如何删除numpy数组中的列?

时间:2015-11-30 20:42:47

标签: python arrays numpy

想象一下,我们有一个5x4矩阵。 我们只需删除第一个维度。 我们怎样才能用 numpy 做到这一点?

array([[  0.,   1.,   2.,   3.],
       [  4.,   5.,   6.,   7.],
       [  8.,   9.,  10.,  11.],
       [ 12.,  13.,  14.,  15.],
       [ 16.,  17.,  18.,  19.]], dtype=float32)

我试过了:

arr = np.arange(20, dtype=np.float32)
matrix = arr.reshape(5, 4)
new_arr = numpy.delete(matrix, matrix[:,0])
trimmed_matrix = new_arr.reshape(5, 3)

看起来有点笨重。 我做得对吗? 如果是,是否有更简洁的方法来移除尺寸而不重塑?

3 个答案:

答案 0 :(得分:19)

如果要从2D Numpy数组中删除列,可以指定像这样的列

保留所有行并摆脱第0列(或从第1列开始到结束)

a[:,1:]

另一种方法,您可以指定要保留的列(如果您愿意,可以更改订单) 这将保留所有行,并仅使用列0,2,3

a[:,[0,2,3]]

可以找到有关此文档的文档here

如果你想要一些特别删除列的东西,你可以这样做:

idxs = list.range(4)
idxs.pop(2) #this removes elements from the list
a[:, idxs]

和@hpaulj提出了numpy.delete()

这将是如何返回' a'删除了2列(0和2)沿轴= 1。

np.delete(a,[0,2],1)

这实际上并没有删除' a'中的项目,它的返回值是一个新的numpy数组。

答案 1 :(得分:3)

使用delete的正确方法是指定索引和维度,例如。删除第1(0)列(维度1):

In [215]: np.delete(np.arange(20).reshape(5,4),0,1)
Out[215]: 
array([[ 1,  2,  3],
       [ 5,  6,  7],
       [ 9, 10, 11],
       [13, 14, 15],
       [17, 18, 19]])

其他有效的表达方式:

np.arange(20).reshape(5,4)[:,1:]
np.arange(20).reshape(5,4)[:,[1,2,3]]
np.arange(20).reshape(5,4)[:,np.array([False,True,True,True])]

答案 2 :(得分:2)

您不需要第二次重塑。

matrix=np.delete(matrix,0,1)