版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37251044/article/details/81911079
原理参考:https://segmentfault.com/q/1010000010111006
一个不是很简单,但是很好理解的方法是:你的输入矩阵的shape是(2,2,4),那么当axis=0时,就是在第一个dimension上进行求和,最后得到的结果的shape就是去掉第一个dimension后的shape,也就是(2,4)。具体的计算方法则是,对于c[i,j,k],假设输出矩阵为s[j,k],第一个dimension求和那么就是
如果axis=1,那么输出shape就是去掉第二个dim,也就是(2,4),计算是
如果axis=2,那么输出shape就是去掉第三个dim,也就是(2,2),计算是
在数据处理里面经常会碰到高维数据,通过二维矩阵去想它的计算方法就很难了,这个时候只要按axis对应的维度求和,其他维度的位置和形状不变,最后把shape去掉对应维度就能理解了
1.Python中Numpy库中np.sum(array,axis=0,1,2…)怎么理解?
import numpy as np
abc = np.arange(0,24,1).reshape(4,3,2)
print ("构造一个[4 3 2]的三维数组:")
print (abc)
print ("\n1.数组的第一维相加之和是:")
print (np.sum(abc, axis=(0, )))
print ("我们看到36是0+6+12+18得到的,40是1+7+13+19得到的。所以可以总结为:axis = 0 时,是4个[3 2]二维数组对应位置相加。")
print ("\n2.数组的第二维相加之和是:")
print (np.sum(abc, axis = (1,)))
print ("我们看到6是0+2+4得到的,9是1+3+5得到的。所以可以总结为:axis = 1时,是[4 3 2]中第二维的3个3个相加,在这里我们可以理解为0 2 4是三行,那么就是3行相加。")
print ("\n3.数组的第三维相加之和是:")
print (np.sum(abc, axis = (2,)))
print ("我们看到1是0+1得到的,5是2+3得到的。所以可以总结为:axis = 2时,是[4 3 2]中的第三维的2个2个相加,在这里我们可以理解为0 1 是两列,那么就是2列相加")
输出:
构造一个[4 3 2]的三维数组:
[[[ 0 1]
[ 2 3]
[ 4 5]]
[[ 6 7]
[ 8 9]
[10 11]]
[[12 13]
[14 15]
[16 17]]
[[18 19]
[20 21]
[22 23]]]
1.数组的第一维相加之和是:
[[36 40]
[44 48]
[52 56]]
我们看到36是0+6+12+18得到的,40是1+7+13+19得到的。所以可以总结为:axis = 0 时,是4个[3 2]二维数组对应位置相加。
2.数组的第二维相加之和是:
[[ 6 9]
[24 27]
[42 45]
[60 63]]
我们看到6是0+2+4得到的,9是1+3+5得到的。所以可以总结为:axis = 1时,是[4 3 2]中第二维的3个3个相加,在这里我们可以理解为0 2 4是三行,那么就是3行相加。
3.数组的第三维相加之和是:
[[ 1 5 9]
[13 17 21]
[25 29 33]
[37 41 45]]
我们看到1是0+1得到的,5是2+3得到的。所以可以总结为:axis = 2时,是[4 3 2]中的第三维的2个2个相加,在这里我们可以理解为0 1 是两列,那么就是2列相加
2.Python中Numpy库中的np.sum(array,axis=(0,1,2))怎么理解?
import numpy as np
abc = np.arange(0,24,1).reshape(4,3,2)
print ("构造一个[4 3 2]的三维数组A是:")
print (abc)
print ("\n1.数组的第一维相加之和B是:")
d = np.sum(abc, axis=(0, ))
print (d)
e = np.sum(d, axis=(1, ))
print ("\n2.数组B的第二维相加之和C是:")
print (e)
print("\n3.数组A的第一维先相加,之后再第三维相加D:")
print (np.sum(abc, axis=(0, 2)))
print ("\n对比说明:axis=(0,2)表示将数组A[4 3 2]的第一维先相加,\
相加之后,变成数组B[3,2],A的第三维是大小是2,在B里边变成第二维了,所以B[3 2]第二维相加变成C[3,]。\
这里我们分步求和得到的C和一步求和的到的D是一致的,证明我们猜想正确。")
输出:
构造一个[4 3 2]的三维数组A是:
[[[ 0 1]
[ 2 3]
[ 4 5]]
[[ 6 7]
[ 8 9]
[10 11]]
[[12 13]
[14 15]
[16 17]]
[[18 19]
[20 21]
[22 23]]]
1.数组的第一维相加之和B是:
[[36 40]
[44 48]
[52 56]]
2.数组B的第二维相加之和C是:
[ 76 92 108]
3.数组A的第一维先相加,之后再第三维相加D:
[ 76 92 108]
对比说明:axis=(0,2)表示将数组A[4 3 2]的第一维先相加,相加之后,变成数组B[3,2],A的第三维是大小是2,在B里边变成第二维了,所以B[3 2]第二维相加变成C[3,]。这里我们分步求和得到的C和一步求和的到的D是一致的,证明我们猜想正确。
具体的代码请访问我的github仓库:JackKuo666/csdn/python-numpy-sum/Python中Numpy库中的np.sum(array,axis=0,1,2…)怎么理解?.ipynb