先说结论
numpy中的axis与shape有关,shape为一个tuple,这个tuple的index即为所在的axis。例如一个ndarray形状为(4,3,2),则4对应的axis为0,3对应的axis为1,2对应的axis为2。
import numpy as np
x=np.arange(24).reshape(4,3,2)
print(x)
运行结果:
[[[ 0 1]
[ 2 3]
[ 4 5]]
[[ 6 7]
[ 8 9]
[10 11]]
[[12 13]
[14 15]
[16 17]]
[[18 19]
[20 21]
[22 23]]]
也即,最外层括号axis=0,每向内增加一层括号,axis加1。
求axis=0的最大值
print(x.max(axis=0))
[[18 19]
[20 21]
[22 23]]
分析:只看最外层括号,最外层括号内是由4个元素组成,每个元素是由一个3*2的矩阵(二维数组)组成。求axis=0的最大值即求这四个元素的最大值,因为元素为矩阵(3*2),最大值即矩阵element-wise(对应元素)的最大值。例如四个矩阵中第一个元素分别为0、6、12、18,所以最大值为18。以此类推:
m
a
x
(
[
0
1
2
3
4
5
]
+
[
6
7
8
9
10
11
]
+
[
12
13
14
15
16
17
]
+
[
18
19
20
21
22
23
]
)
=
[
18
19
20
21
22
23
]
max(\left[ \begin{matrix} 0 & 1 \\ 2 & 3 \\ 4 & 5 \end{matrix} \right]+\left[ \begin{matrix} 6 & 7 \\ 8 & 9 \\ 10 & 11 \end{matrix} \right]+\left[ \begin{matrix} 12 & 13 \\ 14 & 15 \\ 16 & 17 \end{matrix} \right]+\left[ \begin{matrix} 18 & 19 \\ 20 & 21 \\ 22 & 23 \end{matrix} \right])=\left[ \begin{matrix} 18 & 19 \\ 20 & 21 \\ 22 & 23 \end{matrix} \right]
max(⎣⎡024135⎦⎤+⎣⎡68107911⎦⎤+⎣⎡121416131517⎦⎤+⎣⎡182022192123⎦⎤)=⎣⎡182022192123⎦⎤
求axis=1的最大值
print(x.max(axis=1))
[[ 4 5]
[10 11]
[16 17]
[22 23]]
分析:现在只看axis=0中的每一个3*2矩阵(二维数组),每一个二维数组是由三个元素(一维数组)组成。求axis=1的最大值即求三个元素的最大值,因为元素为矩阵(1*2),最大值即矩阵element-wise(对应元素)的最大值。以第一个矩阵为例:
[[ 0 1],[ 2 3],[ 4 5]]
m a x ( [ 0 1 ] + [ 2 3 ] + [ 4 5 ] ) = [ 4 5 ] max(\left[ \begin{matrix} 0 & 1 \\ \end{matrix} \right]+\left[ \begin{matrix} 2 & 3 \\ \end{matrix} \right]+\left[ \begin{matrix} 4 & 5 \\ \end{matrix} \right])=\left[ \begin{matrix} 4 & 5 \\ \end{matrix} \right] max([01]+[23]+[45])=[45]
其它几个矩阵求法一样。
求axis=2的最大值
print(x.max(axis=2))
[[ 1 3 5]
[ 7 9 11]
[13 15 17]
[19 21 23]]
分析:现在只看axis=1中的每一个一维数组。每一个一维数组都是由scalar组成,最大值即为数组中最大的元素,例:
m
a
x
(
[
0
1
]
)
=
1
m
a
x
(
[
2
3
]
)
=
3
m
a
x
(
[
4
5
]
)
=
5
)
max(\left[ \begin{matrix} 0 & 1 \\ \end{matrix} \right])=1 \\ max(\left[ \begin{matrix} 2 & 3 \\ \end{matrix} \right])=3 \\ max(\left[ \begin{matrix} 4 & 5 \\ \end{matrix} \right])=5)
max([01])=1max([23])=3max([45])=5)
其他求法类似。