讲解清晰,转载自:https://blog.csdn.net/rifengxxc/article/details/75008427

众所周知,sum不传参的时候,是所有元素的总和。这里就不说了。

1 sum函数可以传入一个axis的参数,这个参数怎么理解呢?这样理解:

假设我生成一个numpy数组a,如下

  1. >>> import numpy as np
  2. >>> a = np.array([[[1,2,3,2],[1,2,3,1],[2,3,4,1]],[[1,0,2,0],[2,1,2,0],[2,1,1,1]]])
  3. >>> a
  4. array([[[1, 2, 3, 2],
  5. [1, 2, 3, 1],
  6. [2, 3, 4, 1]],
  7. [[1, 0, 2, 0],
  8. [2, 1, 2, 0],
  9. [2, 1, 1, 1]]])
  10. >>>

这是一个拥有两维的数组,每一维又拥有三个数组,这个数组里面拥有四个元素。如果我们要将这个a数组中的第一个元素1定位出来,则我们会输入a[0][0][0]。好,这个axis的取值就是这个精确定位某个元素需要经过多少数组的长度,在这里是3,,所以axis的取值有0,1,2。如果一个数组精确到某个元素需要a[n0][n1][n2][...][n],则axis的取值就是n。定位 到这里,axis的参数的取值就解释完成了。

2 理解参数axis取值对sum结果的影响:

前面说了axis的取值(以数组a为例),axis=0,1,2。在这里,精确定位到某个元素可以用a[n0][n1][n2]表示。n0的取值是0,1(数组两维),代表第一个索引;n1的取值是0,1,2(每一维数组拥有3个子数组),代表第二个索引;n2的取值是0,1,2,3(每个子数组有4个元素),代表第三个索引,这几个取值在后面会用到。

2.1 axis = 0的时候:

axis=0,对应n0已经确定下来,即n0取值定为0,1。所以sum每个元素的求和公式是sum = a[0][n1][n2]+a[1][n1][n2]。接下来确定sum的行数和列数,n1的取值是0,1,2,为3个数,代表行数,n2的取值是0,1,2,3,为4个数,代表列数,所以sum为3*4的数组。

如何求sum的各个元素呢,sum = a[0][n1][n2]+a[1][n1][n2]这个公式又如何理解呢?如下。我们可以做一个表格:注意颜色

 

所以sum(axis=0)的值是 [ [2, 2, 5, 2], [3, 3, 5, 1], [4, 4, 5, 2]]。

验证一下, 正确!

<span style="font-size:14px;">>>> a.sum(axis=0)

  1. array([[2, 2, 5, 2],
  2. [3, 3, 5, 1],
  3. [4, 4, 5, 2]])
  4. </span>

2.2 axis = 1的时候:

axis=1,对应n1已经确定下来,即n1取值定为0,1,2。所以sum每个元素的求和公式是sum =a[n0][0][n2]+a[n0][1][n2]+a[n0][2][n2]。接下来确定sum的行数和列数,n0的取值是0,1,为2个数,代表行数,n2的取值是0,1,2,3,为4个数,代表列数,所以sum为2*4的数组。

如何求sum的各个元素呢,sum = a[n0][0][n2]+a[n0][1][n2]+a[n0][2][n2]这个公式又如何理解呢?我们又做一个表格,颜色不标注了

  n2=0 n2=1 n2=2 n2=3
n0=0 a[0][0][0]+
a[0][1][0]+
a[0][2][0]
= 1+1+2=4
a[0][0][1]+
a[0][1][1]+
a[0][2][1]
=2+2+3=7
a[0][0][2]+
a[0][1][2]+
a[0][2][2]
=3+3+4=10
a[0][0][3]+
a[0][1][3]+
a[0][2][3]
=2+1+1=4
n0=1 a[1][0][0]+
a[1][1][0]+
a[1][2][0]
=1+2+2=5
a[1][0][1]+
a[1][1][1]+
a[1][2][1]
=0+1+1=2
a[0][0][2]+
a[0][1][2]+
a[0][2][2]
=2+2+1=5
a[1][0][3]+
a[1][1][3]+
a[1][2][3]
=0+0+1=1

所以sum(axis=1)的值是 [ [4, 7, 10, 4], [5, 2, 5, 1]]. 验证如下,正确。

  1. >>> a.sum(axis=1)
  2. array([[ 4,  7, 10,  4],
  3. [ 5,  2,  5,  1]])

2.3 axis = 2的时候:

axis=2,对应n2已经确定下来,即n2取值定为0,1,2, 3。所以sum每个元素的求和公式是sum =a[n0][n1][0]+a[n0][n1][1]+a[n0][n1][2]+a[n0][n1][3]。接下来确定sum的行数和列数,n0的取值是0,1,为2个数,代表行数,n1的取值是0,1,2,为3个数,代表列数,所以sum为2*3的数组。

如何求sum的各个元素呢,sum = a[n0][n1][0]+a[n0][n1][1]+a[n0][n1][2]+a[n0][n1][3]这个公式又如何理解呢?我们又做一个表格,颜色不标注了

  n1=0 n1=1 n1=2
n0=0 a[0][0][0]+
a[0][0][1]+
a[0][0][2]+
a[0][0][3]
=1+2+3+2=8
a[0][1][0]+
a[0][1][1]+
a[0][1][2]+
a[0][1][3]
=1+2+3+1=7
a[0][2][0]+
a[0][2][1]+
a[0][2][2]+
a[0][2][3]
=2+3+4+1=10
n0=1 a[1][0][0]+
a[1][0][1]+
a[1][0][2]+
a[1][0][3]
=1+0+2+0=3
a[1][1][0]+
a[1][1][1]+
a[1][1][2]+
a[1][1][3]
=2+1+2+0=5
a[1][2][0]+
a[1][2][1]+
a[1][2][2]+
a[1][2][3]
=2+1+1+1=5

所以sum(axis=2)的值是 [ [8, 7, 10], [3, 5, 5]]. 验证如下,正确。

    1. <span style="font-size:14px;">>>> a.sum(axis=2)
    2. array([[ 8,  7, 10],
    3. [ 3,  5,  5]])</span>

keepdims 的含义

keepdims主要用于保持矩阵的二维特性

import numpy as np
a = np.array([[1,2],[3,4]]) # 按行相加,并且保持其二维特性
print(np.sum(a, axis=1, keepdims=True)) # 按行相加,不保持其二维特性
print(np.sum(a, axis=1))

输出

array([[3], [7]])
array([3, 7])

python中numpy.sum()函数的更多相关文章

  1. python 中的sum( )函数 与 numpy中的 sum( )的区别

    一. python sum函数 描述: sum() 对序列进行求和 用法: sum(iterable[, start]) iterable:可迭代对象,例如,列表,元组,集合. start:指定相加的 ...

  2. python中的sum函数.sum(axis=1)

    看起来挺简单的样子,但是在给sum函数中加入参数.sum(a,axis=0)或者是.sum(axis=1) 就有点不解了 在我实验以后发现 我们平时用的sum应该是默认的axis=0 就是普通的相加 ...

  3. Python中numpy.apply_along_axis()函数的用法

    numpy.apply_along_axis(func, axis, arr, *args, **kwargs): 必选参数:func,axis,arr.其中func是我们自定义的一个函数,函数fun ...

  4. python 中numpy dot函数的使用方法

    这个函数在的数字信号处理中用处还是比较广泛的,函数的具体定义如下所示: numpy.dot(a, b, out=None) 该函数的作用是获取两个元素a,b的乘积,表示的含义如下所示: dot(a, ...

  5. python中numpy对函数进行矢量化转换

    在对numpy的数组进行操作时,我们应该尽量避免循环操作,尽可能利用矢量化函数来避免循环. 但是,直接将自定义函数应用在numpy数组之上会报错,我们需要将函数进行矢量化转换. def Theta(x ...

  6. Python中Numpy.nonzero()函数

    Numpy.nonzero()返回的是数组中,非零元素的位置.如果是二维数组就是描述非零元素在几行几列,三维数组则是描述非零元素在第几组中的第几行第几列. 举例如下: 二维数组: a = np.arr ...

  7. python中numpy.concatenate()函数的使用

    numpy库数组拼接np.concatenate 原文:https://blog.csdn.net/zyl1042635242/article/details/43162031 思路:numpy提供了 ...

  8. Python中的map()函数和reduce()函数的用法

    Python中的map()函数和reduce()函数的用法 这篇文章主要介绍了Python中的map()函数和reduce()函数的用法,代码基于Python2.x版本,需要的朋友可以参考下   Py ...

  9. Python中Numpy ndarray的使用

    本文主讲Python中Numpy数组的类型.全0全1数组的生成.随机数组.数组操作.矩阵的简单运算.矩阵的数学运算. 尽管可以用python中list嵌套来模拟矩阵,但使用Numpy库更方便. 定义数 ...

随机推荐

  1. fontforge制作自定义字体及在手机上应用举例——张鑫旭

    一.看似无关紧要的事件背景 之所以花时间折腾fontforge这个软件,去制作什么自定义的字体是有原因滴. 之前提过,最近我抽空将公司的手机软件HTML5网页化.期间碰到这么一个问题,页面低栏上的电话 ...

  2. Code Signal_10分钟挑战题_constructArray

    完成时间3分06秒 Given an integer size, return an array containing each integer from 1 to size in the follo ...

  3. python学习之老男孩python全栈第九期_数据库day002知识点总结 —— MySQL数据库day2(全部)

    一. 复习1. MySQL: - 服务端 - 客户端2. 通信交流 - 授权 - SQL语句 - 数据库 创建数据库: create database db1 default charset utf8 ...

  4. Oracle用户权限及死锁

    Oracle用户权限表 oracle数据库中涉及到用户权限的三个表,dba_users,all_users,user_users有什么区别 dba_开头的是查全库所有的,all_开头的是查当前用户可以 ...

  5. bzoj P3309 DZY Loves Math——solution

    对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0.给定正整数a,b,求: $$\sum_{i= ...

  6. drupal7图片样式无法生成与显示

    正常设置了图像的样式,并且为内同类型正确设置了显示的样式.但是上传图片后,却并没有在对应的文件夹下生成对应的缩略图.自然没有显示. 网上查询了一下,需要为nginx添加两个设置: location @ ...

  7. CSS之浮动布局(float,浮动原理,清除/闭合浮动方法)

    css之浮动布局 本人博客:查看文章   1.什么是浮动:在我们布局的时用到的一种技术,能够方便我们进行布局,通过让元素浮动,我们可以使元素在水平上左右移动,再通过margin属性调整位置 2.浮动的 ...

  8. 【Python】Java程序员学习Python(四)— 内置方法和内置变量

    <假如爱有天意> 当天边那颗星出现,你可知我又开始想念,有多少爱恋只能遥遥相望,就像月光洒向海面,年少的我们曾以为,相爱的人就能到永远,当我们相信情到深处在一起,听不见风中的叹息,谁知道爱 ...

  9. Java类的封装

    java中四种不同的限定词限定的成员(成员变量或成员变量方法),访问权限由大到小依次为: public(公共的) 可以被所有的类访问 protected(受保护的) 可以被这个类本身访问 可以被它的子 ...

  10. ubuntu下配置JDK7环境变量

    ubuntu下JDK配置本质上和win是一样的: 1.去官网下载JDK7,找jdk-7u21-linux-i586.tar.gz并下载:http://www.oracle.com/technetwor ...