Python 本身 不原生支持张量(Tensor),但通过强大的科学计算库(如 NumPy、TensorFlow、PyTorch 等),Python 成为了处理张量最主流的语言之一。下面系统介绍 Python 如何“处理张量”。


🔹 一、什么是张量(Tensor)?

张量是多维数组的数学概念,是标量、向量、矩阵的推广:

名称 维度 示例形状 Python 表示
标量 0D () 5
向量 1D (3,) [1, 2, 3]
矩阵 2D (2, 3) [[1,2,3], [4,5,6]]
张量 ≥3D (2, 3, 4) 三维及以上数组

✅ 深度学习中,“张量”常指 带数据类型、形状、设备(CPU/GPU)信息的多维数组对象


🔹 二、Python 处理张量的核心库

1. NumPy —— CPU 上的科学计算基石

  • 对象类型numpy.ndarray
  • 特点
    • 高效的 C/Fortran 底层实现
    • 支持广播(broadcasting)、向量化操作
    • 是几乎所有 Python 科学库的基础
  • 示例
    import numpy as np
    x = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])  # shape=(2,2,2)
    print(x[..., 0])  # 取最后一维第0个 → shape=(2,2)
    

⚠️ NumPy 仅支持 CPU不支持自动微分(不能直接用于训练神经网络)。


2. TensorFlow —— Google 的端到端机器学习平台

  • 对象类型tf.Tensor
  • 特点
    • 支持 CPU/GPU/TPU
    • 自动微分(GradientTape
    • 静态图(Graph) + 动态 eager execution(默认)
    • 与 Keras 深度集成(tf.keras
  • 示例
    import tensorflow as tf
    x = tf.constant([1.0, 2.0, 3.0])
    with tf.GradientTape() as tape:
        y = tf.reduce_sum(x ** 2)
    grad = tape.gradient(y, x)  # 自动求导
    

3. PyTorch —— Facebook 主导的灵活研究框架

  • 对象类型torch.Tensor
  • 特点
    • 动态计算图(更像 NumPy,调试友好)
    • 原生支持 GPU(.to('cuda')
    • 自动微分(.backward()
    • 生态丰富(TorchVision, TorchAudio 等)
  • 示例
    import torch
    x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
    y = x.sum()
    y.backward()
    print(x.grad)  # 输出梯度
    

4. 其他库

库名 用途
JAX Google 的 NumPy + 自动微分 + JIT 编译(适合高性能研究)
MXNet Apache 的高效深度学习框架(使用较少)
PaddlePaddle 百度开源,国内常用

🔹 三、张量的核心操作(通用语法)

无论用哪个库,以下操作模式高度一致:

✅ 1. 创建张量

# NumPy
x = np.zeros((2, 3))
x = np.random.randn(2, 3)

# TensorFlow
x = tf.zeros((2, 3))
x = tf.random.normal((2, 3))

# PyTorch
x = torch.zeros(2, 3)
x = torch.randn(2, 3)

✅ 2. 查看属性

x.shape    # 形状
x.dtype    # 数据类型(float32, int64 等)
x.device   # 设备(PyTorch/TensorFlow 特有)

✅ 3. 索引与切片

x[0]          # 第0行
x[:, 1]       # 第1列
x[..., -1]    # 最后一个通道(通用!)

✅ 4. 数学运算

y = x + 1
z = tf.matmul(a, b)      # TF
z = torch.mm(a, b)       # PyTorch
z = np.dot(a, b)         # NumPy

✅ 5. 维度操作

x_reshaped = tf.reshape(x, (6,))      # TF
x_reshaped = x.view(-1)               # PyTorch
x_reshaped = x.reshape(-1)            # NumPy

x_expanded = tf.expand_dims(x, axis=0) # TF
x_expanded = x.unsqueeze(0)            # PyTorch
x_expanded = np.expand_dims(x, axis=0) # NumPy

🔹 四、关键区别:NumPy vs TensorFlow vs PyTorch

特性 NumPy TensorFlow PyTorch
自动微分 ✅ (GradientTape) ✅ (.backward())
GPU 支持 ✅ (tf.device('/GPU:0')) ✅ (.to('cuda'))
计算图 静态+动态 动态(即时执行)
主要用途 数据预处理、传统科学计算 工业部署、生产模型 学术研究、快速原型
与深度学习框架集成 基础 原生 原生

💡 实际项目中常混合使用:

  • NumPy 加载/预处理数据
  • 转为 TensorFlow/PyTorch 张量 进行训练
  • 训练结果转回 NumPy 用于可视化或保存

🔹 五、张量在深度学习中的典型流程(以配准为例)

# 1. 用 NumPy 加载图像
fixed_np = np.load('fixed.npy')      # shape=(32,32)
moving_np = np.load('moving.npy')    # shape=(32,32)

# 2. 拼接并转为 TensorFlow 张量
input_np = np.stack([fixed_np, moving_np], axis=-1)  # (32,32,2)
input_tf = tf.constant(input_np)[None, ...]          # (1,32,32,2)

# 3. 送入模型(VoxelMorph)
warped, disp = model(input_tf)  # warped: (1,32,32,1), disp: (1,32,32,2)

# 4. 转回 NumPy 可视化
warped_np = warped.numpy()[0, ..., 0]  # (32,32)

✅ 总结

问题 答案
Python 原生支持张量吗? ❌ 不支持,需依赖第三方库
主流张量库有哪些? ✅ NumPy(CPU/无梯度)、TensorFlow、PyTorch(GPU/自动微分)
如何选择? - 数据处理 → NumPy
- 工业部署 → TensorFlow
- 研究实验 → PyTorch
语法是否统一? ✅ 高度相似(.shape, [...,i], reshape 等通用)
能否互操作? ✅ 可互相转换(如 tf.constant(np_array)torch.from_numpy()

🌟 Python 的强大之处不在于语言本身,而在于其生态
通过 NumPy/TensorFlow/PyTorch,Python 成为了张量计算和人工智能的事实标准语言

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐