在数据分析和科学计算中,求和是一种常见的操作。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。
