深度学习基础:Tensor(张量)的创建方法详解

文章目录

    • 一、什么是张量(Tensor)?
    • 二、张量的创建方法
      • [1️⃣ 直接创建张量(从列表或数据生成)](#1️⃣ 直接创建张量(从列表或数据生成))
      • [2️⃣ 使用 `torch.zeros()`、`torch.ones()`、`torch.full()` 创建固定值张量](#2️⃣ 使用 torch.zeros()torch.ones()torch.full() 创建固定值张量)
      • [3️⃣ 使用 `torch.arange()`、`torch.linspace()` 创建序列张量](#3️⃣ 使用 torch.arange()torch.linspace() 创建序列张量)
      • [4️⃣ 使用 `torch.rand()`、`torch.randn()` 创建随机张量](#4️⃣ 使用 torch.rand()torch.randn() 创建随机张量)
      • [5️⃣ 使用 `torch.eye()` 创建单位矩阵](#5️⃣ 使用 torch.eye() 创建单位矩阵)
      • [6️⃣ 从 NumPy 数组创建张量](#6️⃣ 从 NumPy 数组创建张量)
      • [7️⃣ 创建与现有张量形状相同的新张量](#7️⃣ 创建与现有张量形状相同的新张量)
    • 三、张量创建总结表
    • [📚 参考资料](#📚 参考资料)

一、什么是张量(Tensor)?

简单来说,张量就是多维数组(multi-dimensional array)

在 PyTorch 中,torch.Tensor 是一个包含数值的多维容器,可以存放在 CPU 或 GPU 上。

具体内容请参考深度学习中的张量(Tensor)入门-CSDN博客

种类 示例 维度
标量(Scalar) torch.tensor(5) 0D
向量(Vector) torch.tensor([1,2,3]) 1D
矩阵(Matrix) torch.tensor([[1,2],[3,4]]) 2D
三维及以上张量 torch.randn(2,3,4) 3D+

二、张量的创建方法

在 PyTorch 中,有多种方式可以创建张量。

下面按类型详细介绍。


1️⃣ 直接创建张量(从列表或数据生成)

  1. 最基础的方式是使用 torch.tensor() 直接从 Python 列表或嵌套列表创建。
python 复制代码
import torch

# 从列表创建张量
x = torch.tensor([1, 2, 3])
print(x)

# 从嵌套列表创建二维张量
m = torch.tensor([[1, 2], [3, 4]])
print(m)

注意

  • 默认数据类型为 torch.float32torch.int64(取决于输入类型)。
  • 可以通过 dtype 参数指定类型:
  1. 也可以使用 torch.Tensor(size) 创建指定形状的张量
python 复制代码
import torch

# 创建指定形状的张量,默认类型为float32
tensor1 = torch.Tensor(3, 2, 4)
print(tensor1)
print(tensor1.dtype)

# 也可以用来创建指定内容的张量
tensor2 = torch.Tensor([[1, 2, 3, 4], [5, 6, 7, 8]])
print(tensor2)
  1. 下边是以上两种方式创建指定类型的张量、

可通过torch.IntTensor()torch.FloatTensor()等创建。

或在torch.tensor()中通过dtype参数指定类型。

python 复制代码
import torch

# 创建int16类型的张量
tensor1 = torch.ShortTensor(2, 2)
tensor2 = torch.tensor([1, 2, 3], dtype=torch.int16)
print(tensor1, tensor1.dtype)
print(tensor2, tensor1.dtype)

# 创建int32类型的张量
tensor1 = torch.IntTensor(2, 3)
tensor2 = torch.tensor([3, 4, 5], dtype=torch.int32)
print(tensor1)
print(tensor2)

# 元素类型不匹配则会进行类型转换
tensor1 = torch.IntTensor([1.1, 2.2, 3.6])
tensor2 = torch.tensor([3.1, 2.2, 1.6], dtype=torch.int32)
print(tensor1)
print(tensor2)

# 创建float32类型的张量
tensor1 = torch.FloatTensor([7, 8, 9])
tensor2 = torch.tensor([1, 2, 3], dtype=torch.float32)
print(tensor1, tensor1.dtype)
print(tensor2, tensor1.dtype)

# 创建float64类型的张量
tensor1 = torch.DoubleTensor(2, 3, 1)
tensor2 = torch.tensor([1, 2, 3], dtype=torch.float64)
print(tensor1)
print(tensor2)

2️⃣ 使用 torch.zeros()torch.ones()torch.full() 创建固定值张量

这类函数非常常用,常用于初始化权重、偏置等。

python 复制代码
# 全零张量
z = torch.zeros((2, 3))
print(z)

# 全一张量
o = torch.ones((2, 3))
print(o)

# 固定值张量
f = torch.full((2, 3), 7)
print(f)

3️⃣ 使用 torch.arange()torch.linspace() 创建序列张量

适合生成规律性的数值序列,是一种指定区间的张量创建。

python 复制代码
# arange: 从 start 到 end(不含 end),步长 step
a = torch.arange(0, 10, 2)
print(a)  # [0, 2, 4, 6, 8]

# linspace: 从 start 到 end,均匀生成 num 个数
b = torch.linspace(0, 1, steps=5)
print(b)  # [0., 0.25, 0.5, 0.75, 1.]

4️⃣ 使用 torch.rand()torch.randn() 创建随机张量

随机张量是深度学习中最常见的初始化方式。

python 复制代码
# [0, 1) 均匀分布
u = torch.rand((2, 3))
print(u)

# 标准正态分布(均值0,方差1),n即normal,代表正态分布
n = torch.randn((2, 3))
print(n)

如果需要指定分布参数,可以使用:

python 复制代码
# 自定义均值和方差
normal = torch.normal(mean=0, std=1, size=(3, 3))

5️⃣ 使用 torch.eye() 创建单位矩阵

在矩阵计算(如线性代数)中非常常用。

python 复制代码
I = torch.eye(3)
print(I)
# 输出:
# tensor([[1., 0., 0.],
#         [0., 1., 0.],
#         [0., 0., 1.]])

6️⃣ 从 NumPy 数组创建张量

PyTorch 与 NumPy 可以方便地相互转换。

python 复制代码
import numpy as np

# NumPy -> Tensor
np_arr = np.array([[1, 2], [3, 4]])
t = torch.from_numpy(np_arr)
print(t)

# Tensor -> NumPy
back = t.numpy()
print(back)

这在数据预处理阶段尤其常见。


7️⃣ 创建与现有张量形状相同的新张量

可以使用以下方法快速创建"形状一致"的张量:

python 复制代码
x = torch.tensor([[1, 2, 3], [4, 5, 6]])

# 与 x 形状相同的全零张量
z = torch.zeros_like(x)

# 与 x 形状相同的全一张量
o = torch.ones_like(x)

# 与 x 形状相同的随机张量
r = torch.rand_like(x, dtype=torch.float)

三、张量创建总结表

方法 功能 示例
torch.tensor(data) 从列表创建张量 torch.tensor([[1,2],[3,4]])
torch.zeros(size) 创建全零张量 torch.zeros((3,3))
torch.ones(size) 创建全一张量 torch.ones((2,4))
torch.full(size, val) 创建固定值张量 torch.full((2,2), 9)
torch.arange(start, end, step) 按步长创建序列 torch.arange(0, 10, 2)
torch.linspace(start, end, steps) 均匀取样序列 torch.linspace(0, 1, 5)
torch.rand(size) 均匀随机分布 torch.rand((2,3))
torch.randn(size) 标准正态分布 torch.randn((2,3))
torch.eye(n) 单位矩阵 torch.eye(3)
torch.from_numpy(arr) 从 NumPy 创建 torch.from_numpy(np_arr)
torch.zeros_like(t) 与张量形状相同 torch.zeros_like(x)

📚 参考资料

相关推荐
小陈工2 小时前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
墨染天姬6 小时前
【AI】端侧AIBOX可以部署哪些智能体
人工智能
AI成长日志6 小时前
【Agentic RL】1.1 什么是Agentic RL:从传统RL到智能体学习
人工智能·学习·算法
2501_948114246 小时前
2026年大模型API聚合平台技术评测:企业级接入层的治理演进与星链4SAPI架构观察
大数据·人工智能·gpt·架构·claude
小小工匠6 小时前
LLM - awesome-design-md 从 DESIGN.md 到“可对话的设计系统”:用纯文本驱动 AI 生成一致 UI 的新范式
人工智能·ui
黎阳之光6 小时前
黎阳之光:视频孪生领跑者,铸就中国数字科技全球竞争力
大数据·人工智能·算法·安全·数字孪生
小超同学你好7 小时前
面向 LLM 的程序设计 6:Tool Calling 的完整生命周期——从定义、决策、执行到观测回注
人工智能·语言模型
智星云算力7 小时前
本地GPU与租用GPU混合部署:混合算力架构搭建指南
人工智能·架构·gpu算力·智星云·gpu租用
jinanwuhuaguo7 小时前
截止到4月8日,OpenClaw 2026年4月更新深度解读剖析:从“能力回归”到“信任内建”的范式跃迁
android·开发语言·人工智能·深度学习·kotlin
xiaozhazha_7 小时前
效率提升80%:2026年AI CRM与ERP深度集成的架构设计与实现
人工智能