在 PyTorch 中,可以通过多种方式创建张量(Tensor)。以下是一些常见的方法:
1. 从数据直接创建
你可以直接从 Python 的列表或数值创建张量。
import torch
# 从列表创建张量
tensor_from_list = torch.tensor([[1, 2], [3, 4]])
print(tensor_from_list)
# 输出:
# tensor([[1, 2],
# [3, 4]])
# 指定数据类型
tensor_with_dtype = torch.tensor([[1.0, 2.0], [3.0, 4.0]], dtype=torch.float32)
print(tensor_with_dtype)
# 输出:
# tensor([[1., 2.],
# [3., 4.]], dtype=torch.float32)
2. 创建全零张量或全一张量
可以使用 torch.zeros
或 torch.ones
创建指定形状的全零或全一张量。
# 全零张量
zeros_tensor = torch.zeros(3, 4) # 3 行 4 列
print(zeros_tensor)
# 输出:
# tensor([[0., 0., 0., 0.],
# [0., 0., 0., 0.],
# [0., 0., 0., 0.]])
# 全一张量
ones_tensor = torch.ones(2, 3) # 2 行 3 列
print(ones_tensor)
# 输出:
# tensor([[1., 1., 1.],
# [1., 1., 1.]])
3. 随机初始化张量
使用 torch.rand
或 torch.randn
创建随机张量。
# 均匀分布随机数
rand_tensor = torch.rand(2, 2)
print(rand_tensor)
# 输出:
# tensor([[0.1234, 0.5678],
# [0.2345, 0.6789]])
# 标准正态分布随机数
randn_tensor = torch.randn(2, 2)
print(randn_tensor)
# 输出:
# tensor([[-0.3456, 0.6789],
# [ 1.2345, -0.1234]])
4. 创建特定范围或规则的张量
- 使用
torch.arange
创建等间距张量。 - 使用
torch.linspace
创建指定区间内均匀分布的点。
# 等间距数值
arange_tensor = torch.arange(0, 10, step=2)
print(arange_tensor)
# 输出:
# tensor([0, 2, 4, 6, 8])
# 等间隔分布
linspace_tensor = torch.linspace(0, 1, steps=5)
print(linspace_tensor)
# 输出:
# tensor([0.0000, 0.2500, 0.5000, 0.7500, 1.0000])
5. 从已有张量创建
- 使用
torch.clone
复制一个张量。 - 使用
torch.empty_like
或torch.zeros_like
基于现有张量的形状创建新张量。
# 克隆张量
original_tensor = torch.tensor([[1, 2], [3, 4]])
clone_tensor = original_tensor.clone()
print(clone_tensor)
# 输出:
# tensor([[1, 2],
# [3, 4]])
# 创建与原张量形状相同的空张量
empty_like_tensor = torch.empty_like(original_tensor)
print(empty_like_tensor)
# 输出是未初始化的随机值
6. 创建未初始化的张量
使用 torch.empty
创建未初始化的张量。
empty_tensor = torch.empty(3, 3)
print(empty_tensor)
# 输出:
# tensor([[<未定义值>, <未定义值>, <未定义值>],
# [<未定义值>, <未定义值>, <未定义值>],
# [<未定义值>, <未定义值>, <未定义值>]])
7. 创建单位矩阵
使用 torch.eye
创建单位矩阵。
identity_tensor = torch.eye(3) # 3x3 单位矩阵
print(identity_tensor)
# 输出:
# tensor([[1., 0., 0.],
# [0., 1., 0.],
# [0., 0., 1.]])
总结
- 可以选择直接创建、初始化为全零或全一、生成随机数等方式。
- 如果需要特定规则(比如等间距、单位矩阵等),使用
torch.arange
或torch.eye
。 - 对于高效操作,尽量预分配张量。