想象一下,我们有一个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)
看起来有点笨重。 我做得对吗? 如果是,是否有更简洁的方法来移除尺寸而不重塑?
答案 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)