如何删除numpy数组中的列?

2024-05-16 23:43:31 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我们有一个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)

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


Tags: 方法numpynewnp矩阵deletearraymatrix
3条回答

如果要从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”的视图,其中沿轴1删除了2列(0和2)。

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

这实际上并没有从“a”中移除项,它的返回值是一个新的numpy数组。

使用delete的正确方法是指定索引和维度,例如删除第一(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])]

你不需要第二次整形。

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

相关问题 更多 >