似乎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)
有没有人注意到这个?我疯了还是这个设计?
答案 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)
。