科普: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):全部拉平成一维

相关推荐
青 春 记 忆3 小时前
Dify Docker Compose 通用无损升级指南:从备份、双版本预演到切换与回滚
运维·人工智能·python·docker·容器
GlueNa2SiO33 小时前
03-Flask模板引擎Jinja2详解
笔记·python·flask
临沂GEO5 小时前
GEO搜索优化科普|正规地理位置流量运营入门指南
大数据·人工智能·python·流量运营
大模型码小白5 小时前
Spring AI Tool 实现自然语言操作 MySQL 数据库详解
服务器·开发语言·数据库·人工智能·python·mysql·spring
荷蒲7 小时前
【小白量化Qbuddy】利用AI学习中文Python
人工智能·python·学习
数据狐(Datafox)8 小时前
京东商品列表API技术解析与落地应用(含标准 JSON 示例)
java·大数据·前端·人工智能·python·数据分析·json
量化吞吐机8 小时前
2026年下半年手工交易规则走向量化表达,产品该先接住哪一步
人工智能·python
Metaphor6929 小时前
使用 Python 读取和删除 Excel 文件属性
python·excel
迷迭香yy10 小时前
Python构建转融券多空识别系统从接口到因子的全流程 IG50免费开源股票数据API接口
开发语言·python·开源
月光船幽幽10 小时前
真实即粗糙,光滑是伪造
人工智能·python