让我们来深入了解一下 PyTorch 中的 remainder() 方法。这个方法主要用于计算除法运算的逐元素余数(即被除数除以除数)。被除数是一个张量,而除数可以是一个数字,也可以是另一个张量。该方法应用了取模运算,并且如果结果的符号与除数不同,则会在取模结果上加上除数。值得注意的是,此方法仅支持整数和浮点数类型的输入。下面是该方法的具体语法——
> 语法: torch.remainder(input, other, out=None)
>
>
> 参数:
>
>
> – input:被除数(张量)。
> – other:除数(张量或数字)。
>
>
> 返回值: 返回一个包含余数值的张量。
接下来,让我们通过一些 Python 示例,一起来深入理解 torch.remainder() 方法的具体用法。
示例 1:
在下面的 Python 示例中,我们将计算一个 torch 张量除以一个数字时的余数。
在这里,当 -13 除以 5 时,余数是 2。这是怎么算出来的呢?mod(-13, 5) = -3,然后 -3 + 5 = 2。当取模值的符号与除数不同时,就会将除数加到取模结果上。请注意,当除数为 -5 时,余数是如何变化的。
Python3
CODEBLOCK_aab31903
输出:
Dividend: tensor([ 5, -13, 24, -7, 7])
Divisor: 5
Remainder: tensor([0, 2, 4, 3, 2])
Divisor: -5
Remainder: tensor([ 0, -3, -1, -2, -3])
示例 2:
在下面的 Python 示例中,我们将计算当被除数和除数都是 torch 张量时的逐元素余数。
Python3
CODEBLOCK_559a025f
输出:
Dividend: tensor([ 15, -13, 15, -15, 0])
Divisor: tensor([ 7, 7, -7, -7, 7])
Remainder: tensor([ 1, 1, -6, -1, 0])
示例 3:
在这个示例中,我们像示例 2 一样计算余数,但这次是针对浮点型张量。
Python3
CODEBLOCK_2b7a9e0f
输出:
Dividend: tensor([ 15., -13., 15., -15., 0.])
Divisor: tensor([ 7., 7., -7., -7., 7.])
Remainder: tensor([ 1., 1., -6., -1., 0.])
示例 4:
在下面的示例中,我们尝试计算除数为零或无穷大时的余数。
请注意,当除数为零时,无论被除数的值是多少,余数都是 nan(非数字)。当一个非零数除以无穷大时,余数是无穷大;而当零除以无穷大时,余数是 0。同时请注意,这两个张量都是浮点型张量。关于整数除以零的情况,让我们看看下一个示例。
Python3
CODEBLOCK_6d408bde
输出:
Dividend: tensor([ 15., -13., 0., -15., 0.])
Divisor: tensor([0., inf, 0., 0., inf])
Remainder: tensor([nan, inf, nan, nan, 0.])
示例 5:
在这个示例中,我们尝试计算一个整数除以零时的余数。
请注意,在被除数是整数的情况下,程序会抛出一个运行时错误(RuntimeError);而在被除数是浮点数的情况下,它会像示例 4 那返回 nan。
Python3
CODEBLOCK_8d5d9607
输出:
Dividend: tensor([15])
Divisor: tensor([0])
RuntimeError: ZeroDivisionError