maxframe.tensor.diff#
- maxframe.tensor.diff(a, n=1, axis=-1)[源代码]#
沿给定轴计算第 n 个离散差值。
第一个差值由
out[n] = a[n+1] - a[n]沿给定轴给出,更高的差值通过递归使用 diff 计算。- 参数:
- 返回:
diff -- 第 n 个差值。输出的形状与 a 相同,除了在 axis 轴上维度会减少 n。输出类型与 a 中任意两个元素之间差值的类型相同。在大多数情况下,这与 a 的类型一致。一个显著的例外是 datetime64 类型,其结果为 timedelta64 输出张量。
- 返回类型:
Tensor
备注
布尔张量的类型会被保留,因此当连续元素相同时结果将包含 False,不同时则为 True。
对于无符号整数张量,结果也将是无符号的。这并不令人意外,因为结果与直接计算差值是一致的:
>>> import maxframe.tensor as mt
>>> u8_arr = mt.array([1, 0], dtype=mt.uint8) >>> mt.diff(u8_arr).execute() array([255], dtype=uint8) >>> (u8_arr[1,...] - u8_arr[0,...]).execute() 255
如果这不可取,则应首先将数组转换为更大的整数类型:
>>> i16_arr = u8_arr.astype(mt.int16) >>> mt.diff(i16_arr).execute() array([-1], dtype=int16)
示例
>>> x = mt.array([1, 2, 4, 7, 0]) >>> mt.diff(x).execute() array([ 1, 2, 3, -7]) >>> mt.diff(x, n=2).execute() array([ 1, 1, -10])
>>> x = mt.array([[1, 3, 6, 10], [0, 5, 6, 8]]) >>> mt.diff(x).execute() array([[2, 3, 4], [5, 1, 2]]) >>> mt.diff(x, axis=0).execute() array([[-1, 2, 0, -2]])
>>> x = mt.arange('1066-10-13', '1066-10-16', dtype=mt.datetime64) >>> mt.diff(x).execute() array([1, 1], dtype='timedelta64[D]')