很多人认为axis=0
代表的是行,axis=1
代表的是列。但其实不是这么理解的。
简单来说,最外层的括号代表着axis=0
,依次往里的括号对应的axis
的计数就依次加1。
例如:
[[0,1],[2,3]]
其中,最外层括号代表的就是axis=0
,下一层的括号代表的就是axis=1
。
操作方式:如果指定轴进行相关的操作,那么它会使用轴下的每个直接子元素的第0个,第1个,第2个…分别进行相关操作。
比如现在有一个二维数组:
x = np.array([[0,1],[2,3]])
x
数组在axis=0
和axis=1
两种情况下的和:x.sum(axis=0)
# result:
array([2,4])
按照axis=0
的方式进行相加,那么就会把最外面轴下的所有直接子元素中的第0个位置进行相加,第1个位置进行相加…依此类推,得到的就是0+2
以及2+3
,然后进行相加,得到的结果就是[2,4]
。
x.sum(axis=1)
# result:
array([1, 5])
按照axis=1
的方式进行相加,那么就会把轴为1里面的元素拿出来进行求和,得到的就是0,1
,进行相加为1,以及2,3
进行相加为5
,所以最终结果就是[1,5]
了。
2. 用np.max
求axis=0
和axis=1
两种情况下的最大值:
np.random.seed(100)
x = np.random.randint(0,10,size=(3,5))
x
# result:
array([[8, 8, 3, 7, 7],
[0, 4, 2, 5, 2],
[2, 2, 1, 0, 8]])
对每列求最大值
:
x.max(axis=0)
# result:
array([8, 8, 3, 7, 8])
按照axis=0
进行求最大值,那么就是在最外面轴里面找直接子元素,然后将每个子元素的第0个值放在一起求最大值,将第1个值放在一起求最大值,以此类推。而如果axis=1
,那么就是拿到每个直接子元素,然后求每个子元素中的最大值:
x.max(axis=1)
# result:
array([8,5,8])
np.delete
求axis=0
和axis=1
两种情况下的删除操作:np.random.seed(100)
x = np.random.randint(0,10,size=(3,5))
# axis=0:
np.delete(x,0,axis=0) # 按照直接子元素的顺序标号,并删除第0号直接子元素
# result:
array([[0, 4, 2, 5, 2],
[2, 2, 1, 0, 8]])
np.delete
是个例外,按照axis=0
的方式进行删除,那么它会首先找到最外面的括号下的直接子元素中的第0个,然后删掉。
np.delete(x,0,axis=1) # 把内层括号中的直接子元素按顺序标号,取0号元素出来并一并删除
# result:
array([[8, 3, 7, 7],
[4, 2, 5, 2],
[2, 1, 0, 8]])
同理,如果我们按照axis=1
进行删除,那么会把第一列的数据删掉。
4. 三维数组的相关操作:
y = np.arange(24).reshape(2,2,6)
y
# result:
array([[[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11]],
[[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23]]])
相关操作
:
y.sum(axis=0)
# result:
array([[12, 14, 16, 18, 20, 22],
[24, 26, 28, 30, 32, 34]])