-
torch.Tensor()
:torch.Tensor()
是 PyTorch 中一个泛化的构造函数,用于创建一个新的张量。- 当调用
torch.Tensor()
时,可以指定张量的维度来创建一个未初始化的张量,其元素可以是任意值,因为它们来自于分配的内存块中的原始值。例如torch.Tensor(2, 3)
将会创建一个大小为 2x3 的未初始化张量。 - 除了未初始化的张量,
torch.Tensor()
也可以用来创建具有特定类型和/或值的张量,例如torch.Tensor([1, 2, 3])
将会创建一个包含元素 [1, 2, 3] 的一维张量。
-
torch.from_numpy()
:torch.from_numpy()
是一个专用的函数,用于将已存在的 NumPy 数组转换成 PyTorch 张量。- 与
torch.Tensor()
不同,torch.from_numpy()
不会创建数组数据的副本;而是创建一个包裹原始 NumPy 数组的张量,这意味着 PyTorch 张量和 NumPy 数组将共享底层内存。因此,对一个结构的改变会反映到另一个结构上。 - 需要注意的是,只有当 NumPy 数组的
dtype
兼容 PyTorch 张量时,才能使用torch.from_numpy()
。如果不兼容,可能需要先使用 NumPy 的astype
方法来转换dtype
。
使用 torch.Tensor()
:
import torch
# 创建未初始化的张量
uninitialized_tensor = torch.Tensor(3, 4) # 3x4 维度的张量
# 创建已初始化的张量
initialized_tensor = torch.Tensor([1, 2, 3]) # 具有给定值的一维张量
使用 torch.from_numpy()
:
import torch
import numpy as np
# 创建 NumPy 数组
np_array = np.array([1, 2, 3])
# 转换 NumPy 数组到 PyTorch 张量
tensor_from_numpy = torch.from_numpy(np_array)
# 改变原始 NumPy 数组,PyTorch 张量也会随之改变
np_array[1] = -2
# 此时 tensor_from_numpy 也会变成 tensor([ 1, -2, 3])
正因为这两个函数的这些差异,开发者需要根据实际场景和数据处理的需求来选择使用哪一种。如果你想要从现有的 NumPy 数组创建一个张量,并且希望二者能共享数据,torch.from_numpy()
是一个很好的选择。但如果你需要创建一个新的张量(无论是否初始化),则应该使用 torch.Tensor()
或者其他的像 torch.zeros()
、torch.ones()
这样的特定初始化方法。