Numpy Sum函数简介
NumPy是Python中非常重要的科学计算库之一,可以用于处理各种类型的多维数组、数学运算等。在NumPy中,sum函数是进行数组元素求和的一个非常有用的函数,能够快速有效地对多维数组进行求和操作,本文就从numpy.sum(axis)方法中讲解numpy中的数组求和操作。
阅读更多:Numpy 教程
基础的numpy.sum()函数
numpy.sum()函数的基本语法为:
numpy.sum(a, axis=None, dtype=None, out=None, keepdims=<No value>)
其中,参数a是输入的数组,可以是python列表或者numpy中的ndarray对象,axis是指对哪个轴进行求和,默认为None,进行全局求和。简单来说,axis用于指定我们要沿哪一个维度进行求和操作,axis的值为None、正整数或者元组,下面分别介绍不同的情况。
下面,我们来看一些基本的操作:
对一维数组进行求和
import numpy as np
a = np.array([1,2,3,4])
result = np.sum(a)
print(result) #输出: 10
我们可以看到,上面的代码中,对一维数组进行求和的结果为10。
对二维数组进行求和
import numpy as np
a = np.arange(4).reshape(2,2)
result = np.sum(a)
print(result) #输出: 6
我们可以看到,二维数组的默认求和操作是对所有元素进行求和,这里输出的结果是6。
沿着指定轴求和
import numpy as np
a = np.array([[1,2],[3,4]])
result = np.sum(a,axis=0)
print(result) #输出: [4 6]
我们可以看到,指定轴为0,那么针对每列的数进行求和,结果为[4 6]。
import numpy as np
a = np.array([[1,2],[3,4]])
result = np.sum(a,axis=1)
print(result) #输出: [3 7]
我们可以看到,指定轴为1,那么针对每行的数进行求和,结果为[3 7]。
Numpy.sum(axis)函数的原理
在理解Numpy.sum(axis)函数之前,我们先来看看axis的定义和相关概念。在计算机科学中,不存在「轴」这个概念,是在数学中才会这样使用,「轴」某种程度上是数学中多维数组与向量的差别。
在numpy中,axis=None
代表的是无论是多少维数组都横向计算后形成一个标量;而axis=0时,指的是沿着第一维计算,得到第二维的和的数组;axis=1时指的是沿着第二维计算,得到第一位的和的数组。
下面,我们用例子来说明上述的概念及原理:
默认axis参数运算
a = np.array([1, 2, 3])
result = np.sum(a,axis=None)
print(result) #输出: 6
上述代码中,a为一维数组,sum(axis=None)返回的是整个数组元素的和。
我们继续看以下代码:
a = np.array([[1, 2], [3, 4]])
result = np.sum(a, axis=None)
print(result) #输出: 10
此次,我们将np.array定义为二维数组a,沿着散落的方向把所有元素加总。
axis=0时的运算
在NumPy中,axis=0代表宽,沿着第0轴(宽)聚合。下面的实例说明对一维数组进行聚合:
a = np.array([1, 2, 3])
result = np.sum(a, axis=0)
print(result) #输出: 6
这里要注意的是,a为一维数组,sum(axis=0)的运用实际上是沿着「列」的方向进行元素求和,并且返回的是一个一维数组。
对于二维数组进行举例:
a = np.array([[1, 2], [3, 4]])
result = np.sum(a, axis=0)
print(result) #输出: [4 6]
这里的sum(axis=0)的运用是实际上沿着「行」的方向进行元素的求和,并且返回的是一个一维数组[4,6]。
axis=1时的运算
在NumPy中,axis=1代表长,沿着第1轴(长)聚合。下面的实例说明对一维数组进行聚合:
a = np.array([1, 2, 3])
result = np.sum(a, axis=1)
print(result)
这里会输出一个错误,因为sum(axis=1)的使用是不适用于一维数组的。
对于二维数组进行举例:
a = np.array([[1, 2], [3, 4]])
result = np.sum(a, axis=1)
print(result) #输出: [3 7]
这里的sum(axis=1)的运用是实际上沿着「列」的方向进行元素的求和,并且返回的是一个一维数组[3, 7]。
用例子理解numpy.sum函数的一些用法和技巧
对于特定情况的处理和返回值的特殊处理
x = np.array([[0, 1], [0, 5]])
result = np.sum(x, axis=1, keepdims=True)
print(result) #输出:[[1][5]]
这里的keepdims=True
表示输入和输出具有相同的维度数,以便在照顾一些特殊的情况,常用于可以使得输出确保与输入具有相同的维数,这个参数在进行加减运算和其他运算时,也常常加入进去。
在这个例子中,axis=1
意味着对于每行元素求和,而返回的结果是一个列向量,长度与列的数量相同,但是行需要从原来的2变成1,因此使用keepdims=True
,可以确保输出具有相同的维数,而不是简单的得到一个一维的结果。
类型转换和均值和权重
data = np.array([1, 2, 3, 4, 5, 6], dtype=np.float32)
weights = np.array([0.1, 0.2, 0.3, 0.2, 0.1, 0.1], dtype=np.float32)
result = np.sum(data * weights) / np.sum(weights)
print(result) #输出: 3.5
在这个例子中,将权值乘以对应的数据,并且将它们相加,得到权重数据加权的总和,然后将它除以权重的总和,从而获得它们的加权平均值。
布尔和负数思考
a = np.array([1, 2, 3, 4, 5, 6, -1, -2, -3], dtype=np.int32)
result = np.sum(a > 0)
print(result) #输出: 6
这里的代码使用了布尔并且用来计算大于0的数有多少个。这里默认情况为int类型的负数也是不大于0的。如果需要按照实际情况计算这里需要注意的是对于有符号数据,这里的定义是不同的。
总结
在本文中,我们介绍了numpy.sum(axis)函数的基本语法和使用方法,以及它的原理。我们可以通过axis参数来指定对哪一个轴进行求和操作,能够快速有效地对多维数组进行求和操作。同时,我们通过例子理解了numpy.sum函数的一些用法和技巧,比如特定情况的处理和返回值的特殊处理、类型转换和均值和权重、布尔和负数思考等等,这些都是我们在日常使用numpy.sum()函数时有可能遇到的问题和解决方法。
总之,numpy.sum(axis)函数是一个非常有用的函数,在进行多维数组的求和运算时,能够快速有效地进行操作。在实际应用中,我们需要根据具体的需求选择对哪一个轴进行求和,正确使用sum函数,可以提高代码效率,更好地编写我们所需要的程序。