maxframe.tensor.diff#

maxframe.tensor.diff(a, n=1, axis=-1)[源代码]#

沿给定轴计算第 n 个离散差值。

第一个差值由 out[n] = a[n+1] - a[n] 沿给定轴给出,更高的差值通过递归使用 diff 计算。

参数:
  • a (array_like) -- 输入张量

  • n (int, optional) -- 差分的次数。如果为零,则按原样返回输入。

  • axis (int, optional) -- 进行差分的轴,默认是最后一个轴。

返回:

diff -- 第 n 个差值。输出的形状与 a 相同,除了在 axis 轴上维度会减少 n。输出类型与 a 中任意两个元素之间差值的类型相同。在大多数情况下,这与 a 的类型一致。一个显著的例外是 datetime64 类型,其结果为 timedelta64 输出张量。

返回类型:

Tensor

参见

gradient, ediff1d, cumsum

备注

布尔张量的类型会被保留,因此当连续元素相同时结果将包含 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]')