torch.trapezoid¶
- torch.trapezoid(y, x=None, *, dx=None, dim=-1) 张量 ¶
计算沿
dim
的梯形法则。默认情况下,假设元素之间的间距为1,但可以使用dx
来指定不同的常数间距,并且可以使用x
来指定沿dim
的任意间距。假设
y
是一个一维张量,其元素为 , 默认的计算方式是当指定
dx
时,计算变为有效地将结果乘以
dx
。当x
被指定时, 假设x
也是一个一维张量, 元素为 ,计算变为当
x
和y
具有相同大小时,计算如上所述,不需要广播。 当它们的大小不同时,此函数的广播行为如下。对于x
和y
,函数计算沿维度dim
的连续元素之间的差异。这实际上创建了两个张量,x_diff 和 y_diff,它们与原始张量具有相同的形状,除了沿维度dim
的长度减少了 1。 之后,这两个张量一起广播以计算最终输出,作为梯形规则的一部分。 有关详细信息,请参见下面的示例。注意
梯形法则是一种通过平均函数的左黎曼和和右黎曼和来近似定积分的技术。随着分区分辨率的增加,近似的准确性也会提高。
- Parameters
- Keyword Arguments
示例:
>>> # 计算一维梯形法则,间距隐含为1 >>> y = torch.tensor([1, 5, 10]) >>> torch.trapezoid(y) tensor(10.5) >>> # 直接计算相同的梯形法则以验证 >>> (1 + 10 + 10) / 2 10.5 >>> # 计算一维梯形法则,间距为2 >>> # 注意:结果与之前相同,但乘以2 >>> torch.trapezoid(y, dx=2) 21.0 >>> # 计算一维梯形法则,间距任意 >>> x = torch.tensor([1, 3, 6]) >>> torch.trapezoid(y, x) 28.5 >>> # 直接计算相同的梯形法则以验证 >>> ((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.trapezoid(y) tensor([ 2., 8., 14.]) >>> # 计算矩阵每列的梯形法则 >>> torch.trapezoid(y, dim=0) tensor([ 6., 8., 10.]) >>> # 计算3x3全1矩阵每行的梯形法则 >>> # 使用相同的任意间距 >>> y = torch.ones(3, 3) >>> x = torch.tensor([1, 3, 6]) >>> torch.trapezoid(y, x) array([5., 5., 5.]) >>> # 计算3x3全1矩阵每行的梯形法则 >>> # 使用每行不同的任意间距 >>> y = torch.ones(3, 3) >>> x = torch.tensor([[1, 2, 3], [1, 3, 5], [1, 4, 7]]) >>> torch.trapezoid(y, x) array([2., 4., 6.])