torch.asarray 是 PyTorch 中的一个函数,用于将输入数据转换为 PyTorch 张量(torch.Tensor)。它的作用类似于 NumPy 的 numpy.asarray 函数,能够将各种类型的输入数据(如列表、NumPy 数组、Python 标量等)转换为 PyTorch 张量。

函数签名

torch.asarray(obj, *, dtype=None, device=None, copy=None, requires_grad=False)

参数说明

  • obj: 输入数据,可以是列表、元组、NumPy 数组、Python 标量、PyTorch 张量等。
  • dtype (可选): 指定输出张量的数据类型。如果未指定,PyTorch 会根据输入数据自动推断数据类型。
  • device (可选): 指定输出张量所在的设备(如 'cpu''cuda')。如果未指定,张量将默认放在 CPU 上。
  • copy (可选): 布尔值,指定是否创建输入数据的副本。如果为 True,则总是创建副本;如果为 False,则尽可能避免创建副本(例如,如果输入已经是 PyTorch 张量且满足其他条件,则直接返回输入张量)。
  • requires_grad (可选): 布尔值,指定是否需要计算梯度。如果为 True,则输出张量将启用自动求导功能。

返回值

  • 返回一个 torch.Tensor 对象,表示转换后的张量。

示例

1. 将列表转换为张量

import torch

data = [1, 2, 3, 4]
tensor = torch.asarray(data)
print(tensor)

输出:

tensor([1, 2, 3, 4])

2. 将 NumPy 数组转换为张量

import numpy as np
import torch

data = np.array([1, 2, 3, 4])
tensor = torch.asarray(data)
print(tensor)

输出:

tensor([1, 2, 3, 4], dtype=torch.int32)

3. 指定数据类型和设备

import torch

data = [1.0, 2.0, 3.0, 4.0]
tensor = torch.asarray(data, dtype=torch.float32, device='cuda')
print(tensor)

输出:

tensor([1., 2., 3., 4.], device='cuda:0')

4. 启用自动求导

import torch

data = [1.0, 2.0, 3.0, 4.0]
tensor = torch.asarray(data, requires_grad=True)
print(tensor)

输出:

tensor([1., 2., 3., 4.], requires_grad=True)

注意事项

  • torch.asarray 是 PyTorch 1.10 版本引入的新函数,因此在较旧的版本中可能不可用。如果你使用的是较旧的 PyTorch 版本,可以使用 torch.tensortorch.from_numpy 来实现类似的功能。
  • 如果输入数据已经是 PyTorch 张量,并且满足 dtypedevice 的要求,torch.asarray 可能会直接返回输入张量而不创建副本,除非 copy=True

总结

torch.asarray 是一个灵活且方便的函数,用于将各种类型的数据转换为 PyTorch 张量。它支持指定数据类型、设备、是否创建副本以及是否启用自动求导等功能,适用于多种场景。