numpy.delete中的向后轴

时间:2014-11-26 02:34:43

标签: python numpy

似乎numpy.delete()中的axis参数是numpy和pandas中所有其他轴参数的后退。通常,axis = 0表示列,而axis = 1表示行。例如:

import numpy as np
mat=np.array([[1,2], [3,4]])
# sum columns
np.sum(mat, axis=0)
# sum rows
np.sum(mat, axis=1)
# min of columns
np.min(mat, axis=0)

这一切都像预期的那样有效。但是如果我使用numpy.delete,我必须切换:

# delete 1st row
np.delete(mat, 0, axis=0)
# delete 1st column
np.delete(mat, 0, axis=1)

有没有人注意到这个?我疯了还是这个设计?

1 个答案:

答案 0 :(得分:1)

这是设计的。您正在指定要从中删除给定索引(或索引)的轴。例如,假设我们有z如下:

In [62]: z
Out[62]: 
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])

通过改变z的第一个索引(即通过选择沿轴0的索引)来选择z的不同行:

In [63]: z[0, :]
Out[63]: array([0, 1, 2, 3, 4])

In [64]: z[1, :]
Out[64]: array([5, 6, 7, 8, 9])

因此,您还可以选择axis=0来删除索引1处的行:

In [65]: np.delete(z, 1, axis=0)
Out[65]: 
array([[ 0,  1,  2,  3,  4],
       [10, 11, 12, 13, 14]])

类似地,您使用轴1(即第二个索引)来访问不同的列:

In [66]: z[:, 0]
Out[66]: array([ 0,  5, 10])

In [67]: z[:, 3]
Out[67]: array([ 3,  8, 13])

因此您使用axis=1删除列:

In [68]: np.delete(z, 3, axis=1)
Out[68]: 
array([[ 0,  1,  2,  4],
       [ 5,  6,  7,  9],
       [10, 11, 12, 14]])

不要忘记这会推广到n维数组。例如,如果您有一个三维数组a,并且想要删除二维切片a[:, :, k],则可以使用np.delete(a, k, axis=2)