NumPy 求和

在数据分析和科学计算中,求和是一种常见的操作。NumPy 提供了以下 2 种函数,用于对数组进行求和运算。

  • sum():计算数组元素的总和。
  • cumsum():计算数组元素的累加和(即由每一步 “中间和” 组成的新数组)。

numpy.sum() 求和

在 NumPy 中,我们可以使用 sum() 函数来计算数组元素的总和。它既能对所有元素求和,也能按行、按列、甚至按任意维度求和。

语法:

numpy.sum(
    arr,
    axis=None,
    dtype=None,
    out=None,
    keepdims=False,
    initial=0,
    where=True
)

说明:

sum() 函数接收以下参数。

  • arr(必选):是一个数组
  • axis(可选,默认:None):用于指定计算总和的轴。
    • 当取值为 None 时,表示计算所有元素的总和。
    • 当取值为 “整数” 时,表示沿指定轴求和。对于二维数组来说,axis=0 表示按列求和(沿着行的方向),得到一个包含每列和的一维数组;axis=1 表示按行求和(沿着列的方向),得到一个包含每行和的一维数组。对于更高维度的数组,数字 i 表示沿着第 i 个维度进行操作。
    • 当取值为 “元组” 时,表示同时对多个轴求和。
  • dtype(可选,默认:None):用于指定输出数组的数据类型。如果没有指定,NumPy 会自动选择合适类型:
    • 整数会被提升为更高精度的类型(如 int64 或 float64),以避免溢出或精度损失。
    • 浮点数会提升到 float64。
  • out(可选,默认:None):指定一个现有数组来存储计算结果,这样可以避免创建新数组,提升性能。其中,out 的形状和数据类型必须与结果兼容。
  • keepdims(可选,默认:False):如果设置为 True,则保留计算结果的维度。例如原数组为 2D,结果仍为 2D 但对应轴长度为 1。
  • initial(可选,默认:0):指定计算总和的初始值。这个初始值会加到数组的每个元素进行累加。例如,如果 initial = 5,那么对于一维数组 [1, 2, 3],计算结果将是 5 + 1 + 2 + 3 = 11。
  • where(可选,默认:True):是一个布尔数组(具体参考 “NumPy 布尔索引”),用来指定哪些元素参与求和。True 表示参与求和,False 表示跳过。

示例 1:numpy.sum() 基本用法

import numpy as np

arr = np.array([1, 2, 3, 4, 5])
result = np.sum(arr)      # 计算数组元素的总和

print(result)

运行结果如下。

15

分析:

numpy.sum(arr) 表示求数组 arr 中所有元素的总和,其结果为:1 + 2 + 3 + 4 + 5 = 15。

示例 2:多维数组与轴操作

import numpy as np

arr = np.array([[1, 2], [3, 4]])
sum1 = np.sum(arr, axis=0)         # 沿第0轴(行方向)求和
sum2 = np.sum(arr, axis=1)         # 沿第1轴(列方向)求和

print('沿0轴求和:', sum1)
print('沿1轴求和:', sum2)

运行结果如下。

沿0轴求和: [4 6]
沿1轴求和: [3 7]

分析:

np.sum(arr, axis=0) 表示对每列求和:1 + 3 = 4,2 + 4 = 6。

np.sum(arr, axis=1) 表示对每行求和:1 + 2 = 3,3 + 4 = 7。

numpy.cumsum() 求累加和

在 NumPy 中,我们可以使用 cumsum() 函数来计算数组元素的累加和。所谓的 “累加和” ,指的是从第一个元素开始依次相加,得到的中间结果然后组成的一个新数组。

语法:

numpy.cumsum(
    arr,
    axis=None,
    dtype=None,
    out=None
)

说明:

cumsum() 函数接收以下参数:

  • arr(必选):是一个数组。
  • axis(可选,默认:None):用于指定计算累加和的方向。
    • 当取值为 None 时,表示将数组展开为一维数组后计算累加和。如果为整数,则表示沿指定的轴计算累加和。
    • 对于二维数组来说,axis=0 表示按列计算累加和(沿着行的方向),axis=1 表示按行计算累加和(沿着列的方向)。
  • dtype(可选,默认:None):用于指定输出数组的数据类型。如果没有指定,则 NumPy 自动选择合适的数据类型。
  • out(可选):指定一个已有数组来存储结果,要求形状和数据类型与输出一致(或可安全转换)。这样可以避免创建新数组,从而提高性能。

示例 3:numpy.cumsum() 基本用法

import numpy as np

arr = np.array([1, 2, 3, 4, 5])
result = np.cumsum(arr)      # 计算数组元素的累加和

print(result)

运行结果如下。

[ 1 3 6 10 15]

分析:

从结果可以看出,numpy.cumsum(arr) 会计算每一步的累加和,然后作为新数组的一个元素。

示例 4:numpy.cumsum() 沿指定轴计算

import numpy as np

arr = np.array([[1, 2], [3, 4]])
cumsum1 = np.cumsum(arr, axis=0)      # 沿第 0 轴累加
cumsum2 = np.cumsum(arr, axis=1)      # 沿第 1 轴累加

print('沿0轴累加:\n', cumsum1)
print('沿1轴累加:\n', cumsum2)

运行结果如下。

沿0轴累加:
 [[1 2]
 [4 6]]

沿1轴累加:
 [[1 3]
 [3 7]]

分析:

np.cumsum(arr, axis=0) 表示沿列方向累加,此时第一行保持原样 [1, 2],第二行为 1 + 3 = 4 和 2 + 4 = 6。

np.cumsum(arr, axis=1) 表示沿行方向累加,此时第一行结果为 [1, 1+2=3],第二行为第一个元素 3 保持不变,第二个元素为 3 + 4 = 7。

上一篇: NumPy 逆矩阵

下一篇: NumPy 求最值

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号