sum()中axis参数的问题:
在选定特定的轴后,sum得到的值维度降低一维
axis的值是shape返回元组的索引,
比如axis=0 是 最高维度 最外层括号
axis = 1:是第二层括号
axis = n是最内层括号 <==> axis =-1
# sum() axis=n 表示以第n维为主元
#以二数组为例:
A = np.array([[1,2,3,4],[5,6,7,8]])
Out[45]:
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
A.sum(axis=1) # 返回一维
#主要变的是列:
#看索引值
'''
行为0时,列为0,1,2 相加的和为 位置 0的值
行为1时,列为0,1,2 相加的和为 位置 1的值
行为2时,列为0,1,2 相加的和为 位置 2的值
也就是: add A[i,j] for j in range(0,A.shape[1])
'''
#array([10, 26])
# 计算结果与A.sum(axis=1) 相同
ls = []
for i in range(0,A.shape[0]):
ls.append( sum(A[i]) )
'''
同样当axis=0时,主要变化的是行
列为0时,行为0,1,2 相加的和为 位置 0的值
... ...
'''
看三维的列子
x= np.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],
[24, 25, 26]]])
x.shape #(3, 3, 3)
axis = 0 #得到的值为二维
for j in range(0, x.shape[1]):
for k in range(0, x.shape[2]):
print( "element = ", (j,k), " ", [ x[i,j,k] for i in range(0, x.shape[0]) ])
...
#最高维为主要变化的量,
#第二维和第三维为 0, 0时,第一维为0,1,2 相加的和为 位置 0,0的值
#第二维和第三维为 0, 0时,第一维为0,1,2 相加的和为 位置 0, 1的值
#第二维和第三维为 0, 0时,第一维为0,1,2 相加的和为 位置 0, 2的值
'''
element = (0, 0) [0, 9, 18] #sum is 27
element = (0, 1) [1, 10, 19] #sum is 30
element = (0, 2) [2, 11, 20]
element = (1, 0) [3, 12, 21]
element = (1, 1) [4, 13, 22]
element = (1, 2) [5, 14, 23]
element = (2, 0) [6, 15, 24]
element = (2, 1) [7, 16, 25]
element = (2, 2) [8, 17, 26]
'''
x.sum(axis=0)
array([[27, 30, 33],
[36, 39, 42],
[45, 48, 51]])
#axis = 1
for i in range(0, x.shape[0]):
for k in range(0, x.shape[2]):
print( "element = ", (i,k), " ", [ x[i,j,k] for j in range(0, x.shape[1]) ])
#第一维和第三维为 0, 0时,第二维为0,1,2 相加的和为 位置 0,0的值
#第一维和第三维为 0, 0时,第二维为0,1,2 相加的和为 位置 0, 1的值
#第一维和第三维为 0, 0时,第二维为0,1,2 相加的和为 位置 0, 2的值
'''
element = (0, 0) [0, 3, 6] #sum is 9
element = (0, 1) [1, 4, 7]
element = (0, 2) [2, 5, 8]
element = (1, 0) [9, 12, 15]
element = (1, 1) [10, 13, 16]
element = (1, 2) [11, 14, 17]
element = (2, 0) [18, 21, 24]
element = (2, 1) [19, 22, 25]
element = (2, 2) [20, 23, 26]
'''
#对于sum函数而言,axis是第一个参数,我们可以省略关键词
x.sum(0), x.sum(1), x.sum(2)
(array([[27, 30, 33],
[36, 39, 42],
[45, 48, 51]]),
array([[ 9, 12, 15],
[36, 39, 42],
[63, 66, 69]]),
array([[ 3, 12, 21],
[30, 39, 48],
[57, 66, 75]]))`