Shortcuts

torch.cumulative_trapezoid

torch.cumulative_trapezoid(y, x=None, *, dx=None, dim=-1) 张量

沿 dim 累积计算 梯形法则。默认情况下,假设元素之间的间距为1,但可以使用 dx 指定不同的常数间距,也可以使用 x 指定沿 dim 的任意间距。

更多详情,请阅读 torch.trapezoid()torch.trapezoid() 与本函数的区别在于,torch.trapezoid() 为每次积分返回一个值, 而本函数为每次积分内的每个间距返回一个累积值。这类似于 .sum 返回一个值,而 .cumsum 返回一个累积和。

Parameters
  • y (张量) – 计算梯形法则时使用的值。

  • x (张量) – 如果指定,定义如上所述的值之间的间距。

Keyword Arguments
  • dx (float) – 值之间的常数间距。如果既没有指定 x 也没有指定 dx,则默认为 1。实际上会将结果乘以其值。

  • dim (int) – 计算梯形法则的维度。默认是最后一个(最内层)维度。

示例:

>>> # 在一维中累积计算梯形法则,间距隐含为1。
>>> y = torch.tensor([1, 5, 10])
>>> torch.cumulative_trapezoid(y)
tensor([3., 10.5])

>>> # 直接计算到每个元素的相同梯形法则以验证
>>> (1 + 5) / 2
3.0
>>> (1 + 10 + 10) / 2
10.5

>>> # 在一维中累积计算梯形法则,间距为2
>>> # 注意:结果与之前相同,但乘以2
>>> torch.cumulative_trapezoid(y, dx=2)
tensor([6., 21.])

>>> # 在一维中累积计算梯形法则,间距任意
>>> x = torch.tensor([1, 3, 6])
>>> torch.cumulative_trapezoid(y, x)
tensor([6., 28.5])

>>> # 直接计算到每个元素的相同梯形法则以验证
>>> ((3 - 1) * (1 + 5)) / 2
6.0
>>> ((3 - 1) * (1 + 5) + (6 - 3) * (5 + 10)) / 2
28.5

>>> # 对3x3矩阵的每一行累积计算梯形法则
>>> y = torch.arange(9).reshape(3, 3)
tensor([[0, 1, 2],
        [3, 4, 5],
        [6, 7, 8]])
>>> torch.cumulative_trapezoid(y)
tensor([[ 0.5,  2.],
        [ 3.5,  8.],
        [ 6.5, 14.]])

>>> # 对矩阵的每一列累积计算梯形法则
>>> torch.cumulative_trapezoid(y, dim=0)
tensor([[ 1.5,  2.5,  3.5],
        [ 6.0,  8.0, 10.0]])

>>> # 对3x3全1矩阵的每一行累积计算梯形法则
>>> #   使用相同的任意间距
>>> y = torch.ones(3, 3)
>>> x = torch.tensor([1, 3, 6])
>>> torch.cumulative_trapezoid(y, x)
tensor([[2., 5.],
        [2., 5.],
        [2., 5.]])

>>> # 对3x3全1矩阵的每一行累积计算梯形法则
>>> #   使用不同的任意间距
>>> y = torch.ones(3, 3)
>>> x = torch.tensor([[1, 2, 3], [1, 3, 5], [1, 4, 7]])
>>> torch.cumulative_trapezoid(y, x)
tensor([[1., 2.],
        [2., 4.],
        [3., 6.]])
优云智算