python:关于sum()函数中axis的一些理解(tensor,ndarray)

前言

在学习sum函数的过程中,经常把求和的维度弄混。每次使用都需要一段时间来梳理用法。最近对sum函数中的“axis=”参数有了更好的理解。为防止忘记,写一篇帖子记录,也希望能对看到的人有所帮助。

注意:所用语言为python,针对的对象是tensor,ndarray中的axis参数。

正文

数组

以一个ndarray类型的3维数组举例:

该数组的形状为 (2,2,2) 。

需要理解的是,这是一个3维数组,也就是说axis的取值在 [0,1,2] 内,当axis=0代表最左端的维度,记为第0维,这个维度有两个对象;axis=1是中间维度,记为第1维,维度内也有两个对象;axis=2是中间维度,记为第2维,维度有两个对象。

借助下方的树状图,可以更好的理解维度,还有维度内的对象个数。

注意:不同的外框形状,代表不同的数组维度 。

计算 

 这是python中np.sum()函数的参数。

def sum(a, axis=None, dtype=None, out=None, keepdims=np._NoValue,
        initial=np._NoValue, where=np._NoValue):

axis表示按维度(轴)求和,默认是第None,即全部元素相加,得到一个数。

dtype表示数据格式,如int,float。

keepdims,即是否保持原先的维度。


假设axis=None,全部元素求和。

 求得:20


假设axis=0,说明第0维的元素(圆角矩形)全部相加。

 

求得: [[4, 4], [6, 6]],形状为(2,2)。

如果保持维度keepdims=True,即[ [[4, 4], [6, 6]] ],形状为(1,2,2)


同理,再假设axis=1,说明第1维的元素(矩形)全部相加。同时第0、2维保持不变,即不能越过圆角矩形的范围求和,也不能把矩形内的2个圆变成1个。

求得:[[3,3],[7,7]],形状为(2,2)。

如果保持维度keepdims=True,即[ [[3,3]],[[7,7]] ],形状为(2,1,2)

验证

在python中进行验证

import numpy as np  # 导入numpy

array = np.array([[[1, 1], [2, 2]], [[3, 3], [4, 4]]])  # 构建数组array

sum_total = array.sum()  # 全部元素求和
sum_0 = array.sum(axis=0)  # 第 0 维求和
sum_0_k = array.sum(axis=0, keepdims=True)  # 第 0 维求和,保持维度
sum_1 = array.sum(axis=1)  # 第 1 维求和
sum_1_k = array.sum(axis=1, keepdims=True)  # 第 1 维求和,保持维度
sum_2 = array.sum(axis=2)  # 第 2 维求和
sum_2_k = array.sum(axis=2, keepdims=True)  # 第 2 维求和,保持维度

print(f"全部元素求和:{sum_total}")
print(f"第 0 维求和:{sum_0},形状:{sum_0.shape}", f"保持维度:{sum_0_k},形状:{sum_0_k.shape}", sep="\n")
print(f"第 1 维求和:{sum_1},形状:{sum_1.shape}", f"保持维度:{sum_1_k},形状:{sum_1_k.shape}", sep="\n")
print(f"第 2 维求和:{sum_2},形状:{sum_2.shape}", f"保持维度:{sum_2_k},形状:{sum_2_k.shape}", sep="\n")

结果

  • 全部元素求和:20
  • 第 0 维求和:[[4 4] [6 6]],形状:(2, 2)
  • 保持维度:[[[4 4] [6 6]]],形状:(1, 2, 2)
  • 第 1 维求和:[[3 3] [7 7]],形状:(2, 2)
  • 保持维度:[[[3 3]] [[7 7]]],形状:(2, 1, 2)
  • 第 2 维求和:[[2 4] [6 8]],形状:(2, 2)
  • 保持维度:[[[2] [4]]  [[6][8]]],形状:(2, 2, 1)

结语 

这篇文章纯属个人理解,目的是记录自己的学习过程。笔者自己的编程水平并不高,如有错误,欢迎各位指正。

和气交流,共同进步。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值