PyTorch学习笔记之基础函数篇(十四)

7.14 torch.fmod() 函数

在PyTorch中,torch.fmod 函数用于计算张量(tensor)中每个元素除以另一个张量或标量后的浮点余数1。

函数签名如下:

torch.fmod(input, divisor, *, out=None) → Tensor

参数解释:

  • input (Tensor): 需要进行取余操作的输入张量。
  • divisor (Tensor or float): 除数,可以是与张量 input 形状相同的张量,也可以是一个标量。
  • out (Tensor, optional): 输出张量。如果提供,则结果将写入这个张量中,并且函数将返回这个张量。

torch.fmod 函数会返回一个新的张量,其中包含了输入张量 input 中每个元素除以 divisor 后的浮点余数。如果 divisor 是一个标量,那么它会被广播到与 input 相同的形状。如果 divisor 是一个张量,那么它必须具有与 input 相同的形状,或者可以广播到与 input 相同的形状。

以下是一个使用 torch.fmod 的例子:

import torch

# 创建一个张量
x = torch.tensor([3.0, 5.0, 7.0])

# 使用标量进行取余操作
y = torch.fmod(x, 2.0)

# 打印结果
print(y)

输出将会是:

tensor([1., 1., 1.])

在这个例子中,torch.fmod 函数计算了张量 x 中每个元素除以标量 2.0 后的浮点余数,并将结果存储在 y 中。

你也可以使用与张量形状相同的 divisor:

# 创建一个张量
x = torch.tensor([3.0, 5.0, 7.0])

# 使用形状相同的张量进行取余操作
divisor = torch.tensor([2.0, 3.0, 4.0])
y = torch.fmod(x, divisor)

# 打印结果
print(y)

输出将会是:

tensor([1.0000, 2.0000, 3.0000])

在这个例子中,divisor 是一个与张量 x 形状相同的张量,torch.fmod 函数分别计算了 x 中每个元素除以 divisor 中对应元素后的浮点余数。

7.15 torch.remainder() 函数

在 PyTorch 中,torch.remainder 函数用于计算张量(tensor)中每个元素除以另一个张量或标量后的余数。这个函数与 torch.fmod 类似,但两者在处理负数和零时的行为有所不同。

函数签名如下:

torch.remainder(input, divisor, *, out=None) → Tensor

参数解释:

  • input (Tensor): 需要进行取余操作的输入张量。
  • divisor (Tensor or float): 除数,可以是与张量 input 形状相同的张量,也可以是一个标量。
  • out (Tensor, optional): 输出张量。如果提供,则结果将写入这个张量中,并且函数将返回这个张量。

torch.remainder 使用 Python 的 % 运算符来计算余数,这意味着它的行为符合 Python 的整数除法规则。具体来说,当 divisor 是正数时,torch.remainder 的行为类似于 torch.fmod。但是,当 divisor 是负数时,torch.remainder 会返回一个与 divisor 符号相同的余数,而 torch.fmod 则总是返回一个正余数。

以下是一个使用 torch.remainder 的例子:

import torch

# 创建一个张量
x = torch.tensor([5, -5, 3, -3])

# 使用标量进行取余操作
y = torch.remainder(x, 2)

# 打印结果
print(y)

输出将会是:

tensor([1, -1, 1, -1])

在这个例子中,torch.remainder 函数计算了张量 x 中每个元素除以 2 后的余数。由于 divisor 是正数 2,所以结果和 torch.fmod 相同。

然而,如果 divisor 是负数,torch.remainder 的行为将会有所不同:

# 使用负数标量进行取余操作
y = torch.remainder(x, -2)

# 打印结果
print(y)

输出将会是:

tensor([-1, 1, -1, 1])

在这个例子中,由于 divisor 是负数 -2,torch.remainder 返回了一个与 divisor 符号相同的余数。

需要注意的是,在处理可能包含零的除法时,torch.remainder 和 torch.fmod 的行为可能也有所不同,因为零不能作为除数。在这种情况下,你应该确保你的代码能够妥善处理这种情况,避免除以零的错误。

7.16 torch.frac() 函数

在PyTorch中,torch.frac 函数用于计算张量(tensor)中每个元素的分数部分,即每个元素减去其向下取整后的值。

函数签名如下:

torch.frac(input, *, out=None) → Tensor

参数解释:

  • input (Tensor): 需要计算分数部分的输入张量。
  • out (Tensor, optional): 输出张量。如果提供,则结果将写入这个张量中,并且函数将返回这个张量。

torch.frac 会返回一个新的张量,其中每个元素都是输入张量中对应元素的分数部分。

以下是一个使用 torch.frac 的例子:

import torch

# 创建一个张量
x = torch.tensor([3.7, -2.2, 5.0, 0.0])

# 计算张量中每个元素的分数部分
y = torch.frac(x)

# 打印结果
print(y)

输出将会是:

tensor([0.7000, 0.7999, 0.0000, 0.0000])

在这个例子中,torch.frac 函数计算了张量 x 中每个元素的分数部分。可以看到,结果张量 y 中的每个元素都是 x 中对应元素减去其向下取整后的值。例如,3.7 的向下取整是 3,所以其分数部分是 3.7 - 3 = 0.7。同样地,-2.2 的向下取整是 -3,所以其分数部分是 -2.2 - (-3) = 0.8(注意这里由于向下取整,符号不会改变),以此类推

7.17 torch.round() 函数

在PyTorch中,torch.round() 函数用于将张量(tensor)中的每个元素四舍五入到最接近的整数。这意味着如果元素的值在两个整数之间,它将向上或向下取整,具体取决于它距离哪个整数更近。

函数签名如下:

torch.round(input, *, out=None) → Tensor

参数解释:

  • input (Tensor): 需要进行四舍五入的输入张量。
  • out (Tensor, optional): 输出张量。如果提供,则结果将写入这个张量中,并且函数将返回这个张量。

torch.round() 返回一个新的张量,其中包含了输入张量中每个元素四舍五入后的结果。

以下是一个使用 torch.round() 的例子:

import torch

# 创建一个张量
x = torch.tensor([1.2, -2.7, 3.5, -4.4])

# 对张量进行四舍五入
y = torch.round(x)

# 打印结果
print(y)

输出将会是:

tensor([ 1., -3.,  4., -4.])

在这个例子中,torch.round() 函数将张量 x 中的每个元素四舍五入到了最接近的整数,并将结果存储在 y 中。可以看到,1.2 四舍五入后变成了 1,-2.7 四舍五入后变成了 -3,3.5 四舍五入后变成了 4,而 -4.4 四舍五入后变成了 -4。

需要注意的是,torch.round() 函数在处理浮点数时可能会引入一些微小的误差,因为浮点数的表示本身就不是完全精确的。然而,在大多数情况下,这些误差是可以忽略不计的。