NumPy - 通用差分函数 (ufunc)
通用差分函数 (ufunc)
NumPy 中的通用差分函数 (ufunc) 是用于计算数组中元素之间差值的函数。
此运算可以应用于两个数组之间的元素级差分,也可以用于计算单个数组沿特定轴的离散差分。NumPy 中用于计算差分的主要函数是 numpy.diff()。
NumPy diff() 函数
numpy.diff() 函数计算数组中连续元素之间的差分,实际上是计算一阶离散差分。它还可以通过指定 n 参数来计算高阶差分。
示例
在下面的示例中,我们使用 numpy.diff() 函数计算一维数组中连续元素之间的差分 -
import numpy as np # 定义一个数组 a = np.array([1, 3, 6, 10, 15]) # 计算一阶差分 diff = np.diff(a) print("一阶差分:", diff)
以下是得到的输出 -
一阶差分:[2 3 4 5]
NumPy 高阶差异
numpy.diff() 函数也可以计算高阶差异。通过指定 n 参数,我们可以多次计算元素之间的差值。
示例
以下示例中,我们使用 numpy.diff() 函数计算数组的二阶差分,其中 n=2 −
import numpy as np # 定义一个数组 a = np.array([1, 3, 6, 10, 15]) # 计算二阶差分 second_diff = np.diff(a, n=2) print("二阶差分:", second_diff)
结果如下 −
二阶差分:[1 1 1]
NumPy diff 函数用于二维数组
numpy.diff() 函数也可用于二维数组。通过指定 axis 参数,我们可以沿特定轴(例如行或列)计算差异。
示例
在以下示例中,我们在二维数组上使用 numpy.diff() 函数来计算沿行和列的差异 -
import numpy as np # 定义一个二维数组 a = np.array([[1, 2, 3], [4, 5, 6]]) # 计算行差值 (axis=1) row_diff = np.diff(a, axis=1) # 计算列差值 (axis=0) col_diff = np.diff(a, axis=0) print("行差值:", row_diff) print("列差值:", col_diff)
以下是得到的输出 −
行差值: [[1 1] [1 1]] 列差值:[[3 3 3]]
使用周期性边界的 NumPy diff
默认情况下, numpy.diff() 函数将数组视为开放式的,这意味着它计算相邻元素之间的差异。但是,我们可以指定 prepend 或 append 参数来包含周期数据的边界元素。
示例
在下面的示例中,我们使用 numpy.diff() 函数和 prepend 参数将数组视为周期序列 -
import numpy as np # 定义一个数组 a = np.array([1, 3, 6, 10, 15]) # 计算具有周期边界的一阶差分 periodic_diff = np.diff(a, append=a[0]) print("周期差分:", period_diff)
结果如下 -
周期差分:[ 2 3 4 5 -14]
numpy.gradient() 函数
numpy.gradient() 函数计算数组的梯度。梯度是导数的多维推广。
对于一维数组,它计算连续元素之间的差分,并考虑边缘效应。对于多维数组,它会计算沿每个轴的梯度。
示例
在此示例中,gradient() 函数计算数组的梯度 -
import numpy as np # 创建一个 NumPy 数组 array = np.array([1, 2, 4, 7, 11]) # 计算梯度 gradient = np.gradient(array) print(gradient)
输出表示每个元素之间的变化率,并在边界处进行了特殊处理 -
[1.1.5 2.5 3.5 4.]
numpy.ediff1d() 函数
numpy.ediff1d() 函数计算扁平化数组中连续元素之间的差异。对于一维数组,它是一个比 numpy.diff() 函数更简单、更快速的替代方案。
示例
在以下示例中,ediff1d() 函数计算数组中每个连续元素之间的差异 -
import numpy as np # 创建一个 NumPy 数组 array = np.array([1, 2, 4, 7, 11]) # 计算元素间的差异 ediff1d_result = np.ediff1d(array) print(ediff1d_result)
这将产生以下结果 -
[1 2 3 4]