假设我们定义了一个维度为
d
i
m
=
[
n
1
,
n
2
,
n
3
]
dim=[n_1, n_2, n_3]
dim=[n1,n2,n3] 的数组,那么
a
x
i
s
axis
axis 取值范围就是
[
0
,
1
,
2
]
[0, 1, 2]
[0,1,2],也就是说对于一个任意的python数组(包括 ndarray 和 pd.DataFrame ),其
a
x
i
s
axis
axis 取值范围是
[
0
,
l
e
n
(
d
i
m
)
]
[0, len(dim)]
[0,len(dim)],依次对应从左到右的下标:
当我们对数组进行操作时指定
a
x
i
s
=
i
axis=i
axis=i 的含义就是在第
i
i
i 个下标变化的方向做操作(其他下标需保持相同)
举例:
import numpy as np
a = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
print(a)
print('\n')
print(a.shape)
print('\n')
print(np.sum(a, axis=1))
输出:
分析:
将
a
a
a 的元素都写出来:
a
[
0
]
[
0
]
[
0
]
=
1
a
[
0
]
[
0
]
[
1
]
=
2
a
[
0
]
[
0
]
[
2
]
=
3
a
[
0
]
[
1
]
[
0
]
=
4
a
[
0
]
[
1
]
[
1
]
=
5
a
[
0
]
[
1
]
[
2
]
=
6
a
[
1
]
[
0
]
[
0
]
=
7
a
[
1
]
[
0
]
[
1
]
=
8
a
[
1
]
[
0
]
[
2
]
=
9
a
[
1
]
[
1
]
[
0
]
=
10
a
[
1
]
[
1
]
[
1
]
=
11
a
[
1
]
[
1
]
[
2
]
=
12
a[0][0][0]=1\ \ \ \ \ a[0][0][1]=2\ \ \ \ \ a[0][0][2]=3\\a[0][1][0]=4\ \ \ \ \ a[0][1][1]=5\ \ \ \ \ a[0][1][2]=6\\a[1][0][0]=7\ \ \ \ \ a[1][0][1]=8\ \ \ \ \ a[1][0][2]=9\\a[1][1][0]=10\ \ \ \ \ a[1][1][1]=11\ \ \ \ \ a[1][1][2]=12
a[0][0][0]=1 a[0][0][1]=2 a[0][0][2]=3a[0][1][0]=4 a[0][1][1]=5 a[0][1][2]=6a[1][0][0]=7 a[1][0][1]=8 a[1][0][2]=9a[1][1][0]=10 a[1][1][1]=11 a[1][1][2]=12
a
x
i
s
=
1
axis=1
axis=1 表示在从左向右第二个下标变化的方向上做加法运算(其他下标保持不变),因而
a
[
0
]
[
0
]
[
0
]
=
1
a[0][0][0]=1
a[0][0][0]=1 会和
a
[
0
]
[
1
]
[
0
]
=
4
a[0][1][0]=4
a[0][1][0]=4 相加得到5,
a
[
0
]
[
0
]
[
1
]
=
2
a[0][0][1]=2
a[0][0][1]=2 会和
a
[
0
]
[
1
]
[
1
]
=
5
a[0][1][1]=5
a[0][1][1]=5 相加得7,以此类推:
最终得到的就是数组
[
[
5
,
7
,
9
]
,
[
17
,
19
,
21
]
]
[[5, 7, 9], [17, 19, 21]]
[[5,7,9],[17,19,21]]
同理如果
a
x
i
s
=
2
axis=2
axis=2 则表示在从左向右第三个下标变化的方向上做加法运算:
因此结果为
[
[
6
,
15
]
,
[
24
,
33
]
]
[[6, 15], [24, 33]]
[[6,15],[24,33]],注意结果的维度为未参与运算的维度,这里前两个维度(2,2)未参与运算,因此结果的 shape 是(2,2)