本文共 1792 字,大约阅读时间需要 5 分钟。
numpy中多维数组的轴sum(axis) 2018/11/21
前言:
什么叫做轴呢,官方文档的说明不好理解,简单说吧数组有多少个中括号就叫做几轴,a.ndim一般不等a.shape[0]如 a=np.arange(80).reshape(20,2,2) a.ndim# 3 a.shape# (20, 2, 2)
本人在网上搜索很多,没有见到很好的解释,一般很难理解。仔细看测试程序你能够理解轴的计算原理,见解有限,欢迎
各位大侠提供更好的解释方法。
=====================================================================================
1.axis 运算总结
一元运算通过axis沿指定轴操作
1).a.ndim=2
axis=0相当于垂直方向各个元素;
axis=1相当于水平方向上处理各个元素;
2).a.ndim=3
axis=0结果:
rst[m][n]=a[0][m][n]+a[1][m][n] +a[2][m][n] i=l_a
axis=1结果:
rst[m][n]=a[m][0][n]+a[m][1][n] +a[m][2][n] +a[m][3][n] i=m_a
axis=2结果:
rst[m][n]=a[m][n][0]+a[m][n][1] +a[m][n][2] +a[m][n][3]+ a[m][n][4] i=n_a
====================================================================================
axis sum总结:(3轴)更多轴你可以做类似推理,比较复杂,在此就不写测试代码。
a.shape=(l_a , m_a, n_a)
rst.shape=(m,n)
axis=0 (m_a, n_a);
axis=1 (l_a, n_a);
axis=2 (l_a, m_a)
====================================================================================
2运算详解:
3.测试程序
def isum(a,axes=0): i0,m0,n0=a.shape if axes == 0: rst = np.zeros((m0, n0)) elif axes == 1: rst = np.zeros((i0, n0)) else: rst = np.zeros((i0, m0)) for i in range(i0): for m in range(m0): for n in range(n0): if axes==0: rst[m][n] += a[i][m][n] elif axes==1: rst[i][n] += a[i][m][n] else: rst[i][m] += a[i][m][n] return rst
isum(a)
Out[44]: array([[ 60., 63., 66., 69., 72.], [ 75., 78., 81., 84., 87.], [ 90., 93., 96., 99., 102.], [105., 108., 111., 114., 117.]])isum(a,1)
Out[45]: array([[ 30., 34., 38., 42., 46.], [110., 114., 118., 122., 126.], [190., 194., 198., 202., 206.]])isum(a,2)
Out[46]: array([[ 10., 35., 60., 85.], [110., 135., 160., 185.], [210., 235., 260., 285.]])
转载地址:https://chunyou.blog.csdn.net/article/details/84327488 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!