1、什么是张量
张量是一个多维的数据容器,可以包含标量、向量、矩阵以及更高维度的数据。在数学上,张量可以被视为一个有序的数组,每个元素都可以通过索引来访问。张量的维度(也称为阶或秩)定义了其形状,即每个维度的大小。
- 0维张量:也称为标量(Scalar),是最基本的数据单元,没有维度,只有一个数值。
- 1维张量:通常称为向量(Vector),可以看作是标量的有序列表,常用于表示数据点或特征。
- 2维张量:称为矩阵(Matrix),在数学和物理学中广泛使用,用于表示线性变换、统计数据等。
- 多维张量:当数据的维度超过两个时,我们称之为多维张量。它们可以表示复杂的数据结构,如图像、视频帧或高维数据集。
-
import torch # 0维张量:标量 scalar = torch.tensor(7) print(scalar.ndim) # 输出0 # 1维张量:向量 vector = torch.tensor([7, 7]) print(vector.ndim) # 输出1 # 2维张量:矩阵 matrix = torch.tensor([[7, 8], [9, 10]]) print(matrix.ndim) # 输出2 # 多维张量 tensor = torch.tensor([[[1, 2, 3], [3, 6, 9], [2, 4, 5]]]) print(tensor.ndim) # 输出3
2、张量的创建
2.1 基本创建方式
(1). 根据已有数据创建张量
(2). 根据形状创建张量
import torch
# 从Python列表创建张量
tensor_from_list = torch.tensor([1, 2, 3, 4, 5])
import numpy as np
# 从NumPy数组创建张量
np_array = np.array([1, 2, 3, 4, 5])
tensor_from_numpy = torch.from_numpy(np_array)
# 创建一个形状为(3, 4)的未初始化张量
tensor_empty = torch.empty(3, 4)
# 创建一个形状为(3, 4)的全0张量
tensor_zeros = torch.zeros(3, 4)
# 创建一个形状为(3, 4)的全1张量
tensor_ones = torch.ones(3, 4)
# 创建一个形状为(3, 4)的全指定值张量,这里指定值为7
tensor_full = torch.full((3, 4), 7)
# 创建一个形状为(3, 4)的随机张量
tensor_rand = torch.rand(3, 4)
# 或者,创建一个与已有张量形状相同,元素值随机的张量
tensor_rand_like = torch.rand_like(tensor_zeros)
# 创建一个形状为(3, 4)的标准正态分布随机张量
tensor_randn = torch.randn(3, 4)
# 或者,创建一个与已有张量形状相同,元素值从标准正态分布随机的张量
tensor_randn_like = torch.randn_like(tensor_zeros)
2.2 创建线性和随机张量
(1) 线性张量
创建线性张量: 线性张量通常指的是张量中的元素是按照某种线性规律排列的。在PyTorch中,可以使用torch.arange
或torch.linspace
来创建这样的张量。
使用torch.arange
创建从起始值到结束值的线性序列张量:
import torch
# 假设我们想要从0开始到9结束,步长为1的线性张量
linear_tensor = torch.arange(10) # 等同于 torch.arange(start=0, end=10, step=1)
使用torch.linspace
创建在指定范围内均匀分布的线性张量:
# 从0到1创建10个均匀分布的线性张量
linear_tensor_even = torch.linspace(start=0, end=1, steps=10)
(2) 随机张量
随机张量是指张量中的元素是随机生成的。PyTorch提供了多种方法来创建随机张量。
使用torch.rand
创建在[0, 1)区间内均匀分布的随机张量:
# 创建一个形状为(3, 4)的随机张量
random_tensor_uniform = torch.rand(3, 4)
使用torch.randn
创建标准正态分布(均值为0,标准差为1)的随机张量&#