python sum axis,numpy.sum()方法中axis参数的理解

numpy.sum()可以对numpy数组中的元素进行求和运算,在不指定参数axis时,会对所有的元素进行求和

a = np.array(

[[1,2,3],

[2,3,4]]

)

a.sum() # 结果:15

当指定axis时,会按照参数设置对指定坐标轴进行加和,这个参数其实有点抽象,先看例子:

a.sum(axis=0) # 结果:[3, 5, 7]

a.sum(axis=1) # 结果:[6, 9]

再加一维就有点混乱:

b = np.array(

[[[1,2,3],

[2,3,4]],

[[3,4,5],

[4,5,6]]]

)

b.sum(axis=0) # 结果:[[ 4, 6, 8], [ 6, 8, 10]]

b.sum(axis=1) # 结果:[[ 3, 5, 7], [ 7, 9, 11]]

b.sum(axis=2) # 结果:[[ 6, 9], [12, 15]]

axis这时还可以是元组,更抽象

b.sum(axis=(0,1)) #结果:[10, 14, 18]

b.sum(axis=(0,2)) # 结果:[18, 24]

我们在想象一个数组时,往往喜欢将数组想象为一个几何图形,如将二位数组想象为平面中的网格,三维则是空间中的立方体,这种方法几乎成了了人们思维的贯式,但这种方法有很大的局限性。在2维,3维时我们尚可在脑中想象,或在纸上画出草图,但更高维则非常困难。所以在理解numpy数组时,不应该将数组想象为几何图形,反而从符号上直接入手会更容易。

在这个问题中,我们把三维数组b看作b[][][] ,从左到右依次是第0,1,2维的下标。而axis参数指定了某一个维度,求和结果的形状就是其他两个维度的形状,结果的值就是其他两个维度(axis指定维度之外的维度)指定情况下,该维度(axis指定维度)所有值的和。

换句话来说,axis所指定的维度就是加和时要循环的维度

用上面的a,b两个数组举例子:a.sum(axis=0),其中a.shape=(2, 3), 我们可以知道求和结果s的形状为(3,),结果中的每一个值s[i]就是:

s[i] = a[0][i] + a[1][i] + a[2][i]

说人话(空间理解)就是对 2行 3列 的a,求每列的和。axis指定了第0维,加和时要循环的维度就是第0维度,即循环行,结果就是对每列求和。

复杂的情况:b.sum(axis=(0,1)),其中b.shape=(2,2,3),我们可以得到求和结果s的形状为(3,),结果中的每一个值s[i]就是:

s[i] = b[0][0][i] + b[0][1][i] + b[1][0][i] + b[1][1][i]

说人话就是对 长2 宽2 层数为3 的b,求每一层的和。axis指定了第(0, 1)维,加和时要循环的维度就是第0和第1维度,即循环长宽,结果就是对每一层求和。

b.sum(axis=2),其中b.shape=(2,2,3),我们可以得到求和结果s的形状为(2, 2),结果中的每一个值s[i][j]就是:

s[i][j] = b[i][j][0] +b[i][j][1] +b[i][j][2]

说人话就是对 长2 宽2 层数为3 的b,求长宽二维平面每一点上所有层的和。axis指定了第2维,加和时要循环的维度就是第2维,即循环每一层,结果就是长宽的二维平面,平面上每一个点代表其位置上所有层的和 。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值