科普:Python / Numpy / PyTorch 的数据拼接方法

记住 3 大类拼接

  1. 横向拼接(左右拼) = 列变多
  2. 纵向拼接(上下拼) = 行变多
  3. 维度拼接(任意维度) = 通用

一、NumPy 数组拼接(ndarray)

先构造两个简单数组:

python 复制代码
import numpy as np

a = np.array([[1, 2],
              [3, 4]])  # shape (2,2)

b = np.array([[5, 6],
              [7, 8]])  # shape (2,2)

1. 横向拼接 np.hstack

水平拼接,列增加

python 复制代码
c = np.hstack((a, b))  # h = horizontal
print(c)
print(c.shape)  # (2, 4)
复制代码
[[1 2 5 6]
 [3 4 7 8]]

2. 纵向拼接 np.vstack

垂直拼接,行增加

python 复制代码
c = np.vstack((a, b))  # v = vertical
print(c)
print(c.shape)  # (4, 2)
复制代码
[[1 2]
 [3 4]
 [5 6]
 [7 8]]

3. 通用拼接 np.concatenate

  • axis=0 → 垂直(行方向),上下拼 = 增加行
  • axis=1 → 水平(列方向),左右拼 = 增加列
python 复制代码
# 垂直拼接 = vstack
c = np.concatenate([a, b], axis=0)  #shape (4,2)

# 水平拼接 = hstack
c = np.concatenate([a, b], axis=1)  #shape (2,4)

4. 新增维度拼接 np.stack

多出来一个维度

python 复制代码
c = np.stack([a, b], axis=0)
print(c.shape)  # (2, 2, 2)

即:

c=

\[\[1 2

3 4\]

\[5 6

7 8\]

]


二、Python 原生 list 拼接

python 复制代码
list1 = [1, 2, 3]
list2 = [4, 5, 6]

1. + 拼接

python 复制代码
list3 = list1 + list2  # [1,2,3,4,5,6]

2. .extend()

python 复制代码
list1.extend(list2)     # list1 变成 [1,2,3,4,5,6]

⚠️ 注意:
list 没有行列概念,只能简单拼接,不能按维度拼接


三、PyTorch 张量拼接(torch.Tensor)

python 复制代码
import torch

a = torch.tensor([[1,2],[3,4]])  # (2,2)
b = torch.tensor([[5,6],[7,8]])  # (2,2)

1. torch.cat 最常用

python 复制代码
# 垂直拼接(行增加)dim=0
c = torch.cat([a, b], dim=0)  # (4,2)

# 水平拼接(列增加)dim=1
c = torch.cat([a, b], dim=1)  # (2,4)

2. torch.stack 新增维度

python 复制代码
c = torch.stack([a, b], dim=0)
print(c.shape)  # (2, 2, 2)

3. 没有专门的 hstack / vstack

但可以用 cat 完全替代:

  • hstackcat(..., dim=1)
  • vstackcat(..., dim=0)

五、总结表

类型 横向拼接(列) 纵向拼接(行) 新增维度
NumPy np.hstack np.vstack np.stack
np.concatenate(axis=1) np.concatenate(axis=0)
Torch torch.cat(dim=1) torch.cat(dim=0) torch.stack
List list1 + list2 list1 + list2 不支持

六、NumPy 拼接 ↔ PyTorch 张量拼接

在深度学习领域,通常使用张量(如,PyTorch 张量),为此我们专门讨论一下"NumPy 拼接 ↔ PyTorch 张量拼接"。

0. 先构造数据

python 复制代码
import numpy as np
import torch

# 两个 (2,1) 数组,模拟你代码里的 oof_1, oof_2
a_np = np.array([[1], [2]])        # shape (2,1)
b_np = np.array([[3], [4]])        # shape (2,1)

a_torch = torch.tensor([[1], [2]]) # shape (2,1)
b_torch = torch.tensor([[3], [4]])

1. 横向拼接(列拼接 → 特征变多)

NumPy 方式

python 复制代码
# 水平拼接
h_np = np.hstack([a_np, b_np])
print(h_np)
print(h_np.shape)  # (2, 2)

结果:

复制代码
[[1 3]
 [2 4]]

等价通用写法:

python 复制代码
h_np2 = np.concatenate([a_np, b_np], axis=1)

PyTorch 对应方式

python 复制代码
h_torch = torch.cat([a_torch, b_torch], dim=1)
print(h_torch)
print(h_torch.shape)  # torch.Size([2, 2])

效果完全一样!


2. 纵向拼接(行拼接 → 样本变多)

NumPy

python 复制代码
v_np = np.vstack([a_np, b_np])
print(v_np.shape)  # (4,1)

等价:

python 复制代码
v_np2 = np.concatenate([a_np, b_np], axis=0)

PyTorch

python 复制代码
v_torch = torch.cat([a_torch, b_torch], dim=0)
print(v_torch.shape)  # torch.Size([4,1])

3. 新增维度拼接(stack)

NumPy

python 复制代码
s_np = np.stack([a_np, b_np], axis=0)
print(s_np.shape)  # (2, 2, 1)

PyTorch

python 复制代码
s_torch = torch.stack([a_torch, b_torch], dim=0)
print(s_torch.shape)  # torch.Size([2, 2, 1])

4. 对照表

操作 NumPy PyTorch 效果
横向拼接(列) np.hstack([a,b]) torch.cat([a,b], dim=1) 特征增加
纵向拼接(行) np.vstack([a,b]) torch.cat([a,b], dim=0) 样本增加
通用拼接 np.concatenate(..., axis=) torch.cat(..., dim=) 任意维度
新增维度 np.stack(..., axis=) torch.stack(..., dim=) 维度+1
  • numpy:hstack / vstack / concatenate(axis=...)
  • torch:统一用 torch.cat(dim=...)
  • dim=0 上下拼,dim=1 左右拼

相关推荐
Dxy12393102162 小时前
Python图片转PDF:高效实现多图合并与自定义布局
java·python·pdf
搂着猫睡的小鱼鱼2 小时前
反向海淘优势逐步释放,重构跨境贸易格局
python
杜子不疼.2 小时前
2026 年 Python AI 大模型部署全攻略:本地运行 + API 服务 + Docker 封装
人工智能·python·docker
郝学胜-神的一滴2 小时前
PyTorch核心技巧|view函数深度解析:解锁张量连续性的底层密码
人工智能·pytorch·python·深度学习·线性代数·机器学习
E_ICEBLUE2 小时前
在 Python 中给 PDF 设置背景图或背景色
开发语言·python·pdf
机器学习之心2 小时前
PyTorch基于LightGBM的海洋温盐异常垂直剖面预测
人工智能·pytorch·python
Thomas.Sir2 小时前
第十一章:RAG知识库开发之【RAG 的缺陷分析与优化:从入门到实践的完全指南】
python·ai·rag·缺陷分析·效果评估
chushiyunen2 小时前
python web框架streamlit
开发语言·前端·python
DeepModel2 小时前
机器学习降维核心:奇异值分解 SVD
人工智能·python·机器学习