Numpy Sum函数简介

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函数,可以提高代码效率,更好地编写我们所需要的程序。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程