科普:list (列表),np.array (数组(多维)),torch.Tensor (张量),及其shape与reshape

一、三者关系与比较

(一)能力递进

复制代码
普通列表 list
    ↓(变成结构化数值数组)
numpy 数组 np.array
    ↓(加上 GPU/自动求导/深度学习能力)
张量 Tensor (PyTorch / TensorFlow)

1)普通列表:list

python 复制代码
data = [
    [1,2,3,4],
    [5,6,7,8],
    [9,10,11,12]
]
  • 只是容器,用来装东西
  • 没有 .shape,不能 reshape
  • 不能批量加减乘除
  • 机器学习模型不能直接用

2)numpy 数组:np.array(ndarray)

python 复制代码
import numpy as np
arr = np.array(data)
  • 多维数组,数学上就是张量结构
  • .shape、可 reshape
  • 支持矩阵运算、拼接、均值等
  • 用于数据处理、特征工程、Stacking 构造影子数据集
  • 一般在 CPU 上运行

在数学定义里:np.array 就是张量

在工程叫法里:大家习惯叫它"数组"


3)深度学习中张量:torch.Tensor / tf.Tensor

python 复制代码
import torch
tensor = torch.tensor(data)
# 或者从 numpy 转换
tensor = torch.from_numpy(arr)
  • 结构和 np.array 几乎一样
  • 额外支持:GPU 加速、自动求导、反向传播
  • 是神经网络的标准输入格式
  • 用于训练深度学习模型

(二)区别汇总

结构 数学身份 能否 reshape 能否进模型 运行设备
list 无结构容器 ❌ 不能 ❌ 不行 CPU
np.array 多维数组/张量 ✅ 可以 ⚠️ 传统ML可以 CPU
Tensor 张量 ✅ 可以 ✅ 深度学习专用 GPU/CPU

  1. list 只是 Python 普通列表,不是数值数组。
  2. np.array 是数值型多维数组,数学上就是张量,适合数据处理与传统机器学习。
  3. Tensor 是专为深度学习设计的张量,支持 GPU 和自动求导。

它们的维度结构完全一致,只是用途和能力逐级增强。


二、三者(list / np.array / tensor) 的 shape 与 reshape

1. 普通列表:list

python 复制代码
lst = [
    [1,2,3,4],
    [5,6,7,8],
    [9,10,11,12]
]

shape

  • 没有 .shape 属性
  • 你只能看到是"列表套列表"
  • 无法直接知道维度、行列数

reshape

  • 完全不支持 reshape
  • 没有任何变形能力
  • 想变形必须先转成 np.array 或 tensor

2. NumPy 数组:np.array(ndarray)

python 复制代码
import numpy as np
arr = np.array(lst)

shape

  • .shape
  • 上面例子:(3, 4)
  • 清晰:3 行 4 列

reshape

  • 完全支持
  • 最常用:
    • reshape(-1, 1) → 变成一列
    • reshape(1, -1) → 变成一行
    • reshape(4, 3) → 重新排列
  • 元素总数永远不变
  • 变形后仍然是 np.array
python 复制代码
arr.reshape(-1, 1).shape  # (12, 1)

3. 深度学习张量:torch.Tensor(以 PyTorch 为例)

python 复制代码
import torch
ts = torch.tensor(lst)

shape

  • .shape
  • 同样是 (3, 4)
  • 用法和 np.array 几乎一样

reshape

  • 同样支持 reshape(...)

  • 语法完全一致:

    python 复制代码
    ts.reshape(-1, 1)   # 变成一列
    ts.reshape(4, 3)
  • 变形后仍然是 tensor

  • 可在 GPU 上运行


一句话总结

  1. list

    • 无 shape
    • 不能 reshape
  2. np.array

    • 有 shape
    • 能 reshape
    • 数学上 = 张量
    • 用于数据处理、Stacking
  3. tensor

    • 有 shape
    • 能 reshape
    • 深度学习专用张量
    • 支持 GPU / 自动求导

三、重塑形状reshape

下面二行做的事情一模一样

python 复制代码
np.array(lst).reshape(-1, 1)  # numpy 数组变一列
torch.tensor(lst).reshape(-1, 1)  # 张量变一列

只有 list 不行:

python 复制代码
lst.reshape(-1, 1)  # 报错!

reshape 用法

口诀

元素总数不变,形状随便排;
-1 自动算,不用你瞎猜。


示例

以np.array的reshape 为例。

一维数组 reshape 示例

python 复制代码
import numpy as np
a = np.array([1,2,3,4,5,6])  # shape=(6,)
  1. a.reshape(2, 3)
    → 2行3列

    [[1 2 3]
    [4 5 6]]

  2. a.reshape(3, 2)
    → 3行2列

    [[1 2]
    [3 4]
    [5 6]]

  3. a.reshape(-1, 1)
    → 自动6行,固定1列

    [[1]
    [2]
    [3]
    [4]
    [5]
    [6]]


二维数组 reshape 示例

python 复制代码
b = np.array([[1,2,3],
              [4,5,6]])  # shape=(2,3)
  1. b.reshape(3, 2)

    → 变回 3行2列

  2. b.reshape(1, 6)

    → 1行6列(扁平)

  3. b.reshape(-1)

    → 一维数组 [1,2,3,4,5,6]

  4. b.reshape(-1, 1)

    → 全部拉成 1 列

    [[1]
    [2]
    [3]
    [4]
    [5]
    [6]]


三维数组 reshape 示例

python 复制代码
c = np.array([[[1,2],[3,4]],
              [[5,6],[7,8]]])  # shape=(2,2,2)
  1. c.reshape(4, 2)

    → 二维 4行2列

  2. c.reshape(2, 4)

    → 二维 2行4列

  3. c.reshape(-1)

    → 一维 [1,2,3,4,5,6,7,8]

  4. c.reshape(-1, 1)

    → 统一变成 1 列二维数组


reshape中的-1 到底是什么?

  • reshape(x, -1):你定行数,列数自动算
  • reshape(-1, x):你定列数,行数自动算
  • reshape(-1):全部拉平成一维

相关推荐
AI职业加油站2 小时前
数据要素时代:大数据治理工程师证书深度解码
大数据·开发语言·人工智能·python·数据分析
amIZ AUSK2 小时前
Redis——使用 python 操作 redis 之从 hmse 迁移到 hset
数据库·redis·python
深蓝海拓3 小时前
基于QtPy (PySide6) 的PLC-HMI工程项目(二)系统规划
笔记·python·qt·学习·plc
迷藏4943 小时前
**雾计算中的边缘智能:基于Python的轻量级任务调度系统设计与实现**在物联网(IoT)飞速发展的今天,传统云
java·开发语言·python·物联网
biubiubiu07063 小时前
从 Python 和 Node.js 的流行看 Java 的真实位置
java·python·node.js
大江东去浪淘尽千古风流人物3 小时前
【Basalt】Basalt void SqrtKeypointVioEstimator<Scalar_>::optimize() VIO优化流程
数据库·人工智能·python·机器学习·oracle
CoberOJ_3 小时前
(2026-04-01更新)小白自己写,量化回测系统stock-quant(六)
python·ai·股票·量化·交易·回测·a股港股美股
qq_283720053 小时前
Python:time/datetime 模块教程
python·时间·模块·日期
qq_252614414 小时前
PyMySQL 对 caching_sha2_password 支持不完善
python