【python笔记】:2.Python中Numpy库中的np.sum(array,axis=(0,1,2))怎么理解?

版权声明:本文为博主原创文章,未经博主允许不得转载。 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求和那么就是

s [ j , k ] = i ( c [ i , j , k ] )

如果axis=1,那么输出shape就是去掉第二个dim,也就是(2,4),计算是

s [ i , k ] = s u m j ( c [ i , j , k ] )

如果axis=2,那么输出shape就是去掉第三个dim,也就是(2,2),计算是

s [ i , j ] = s u m k ( c [ i , j , k ] )

在数据处理里面经常会碰到高维数据,通过二维矩阵去想它的计算方法就很难了,这个时候只要按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]]
我们看到360+6+12+18得到的,401+7+13+19得到的。所以可以总结为:axis = 0 时,是4个[3 2]二维数组对应位置相加。

2.数组的第二维相加之和是:
[[ 6  9]
 [24 27]
 [42 45]
 [60 63]]
我们看到60+2+4得到的,91+3+5得到的。所以可以总结为:axis = 1时,是[4 3 2]中第二维的33个相加,在这里我们可以理解为0 2 4是三行,那么就是3行相加。

3.数组的第三维相加之和是:
[[ 1  5  9]
 [13 17 21]
 [25 29 33]
 [37 41 45]]
我们看到10+1得到的,52+3得到的。所以可以总结为:axis = 2时,是[4 3 2]中的第三维的22个相加,在这里我们可以理解为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

猜你喜欢

转载自blog.csdn.net/weixin_37251044/article/details/81911079