NumPy中np.vstack()与np.hstack()的数组拼接指南

Luna
Luna
发布时间:2026-10-11| 3人浏览过
原创

本文详解 NumPy 中用于数组合并的 np.vstack() 与 np.hstack() 方法。两者分别实现竖直堆叠与水平拼接,核心差异在于目标轴与维度匹配规则。文章提供完整代码示例,梳理常见报错原因与参数传递技巧,帮助开发者准确重组数据矩阵。

目标与核心逻辑

在数据处理与矩阵运算中,经常需要将多个小规模数组合并为更大规模的结构。NumPy 提供了两个高频使用的拼接函数,它们的底层逻辑均基于轴(axis)的对齐:

  • np.hstack():沿水平方向(列向/第二维)平铺拼接,功能等价于 np.concatenate(tup, axis=1)。
  • np.vstack():沿垂直方向(行向/第一维)堆叠数组,功能等价于 np.concatenate(tup, axis=0)。

理解两者的区别后,只需关注目标维度是否匹配,即可快速完成数据重组。

水平拼接 hstack 实操指南

hstack 要求传入的序列数组在所有轴上保持一致,唯一例外的是第二轴(水平方向)。对于纯一维数组,长度可以任意。

import numpy as np

# 基础一维数组拼接(长度不限)
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
print("1D hstack 结果:", np.hstack((arr1, arr2)))

# 二维数组拼接(必须保证行数一致)
a1 = np.array([[1, 2], [3, 4], [5, 6]])
a2 = np.array([[7, 8], [9, 10], [11, 12]])
print("2D hstack 结果:\n", np.hstack((a1, a2)))

上述代码会将 a1 与 a2 横向合并。执行后可观察到列数相加,行数保持不变。这是深度学习数据预处理中常见的特征向量串联场景。

垂直堆叠 vstack 实操指南

vstack 的要求与前者相反:除了第一轴(垂直方向)外,其余维度必须完全相同。一维数组参与堆叠时,长度必须严格相等。

import numpy as np

# 一维数组堆叠(长度必须一致)
print("1D vstack 结果:\n", np.vstack(([1, 2, 3], [3, 4, 5])))

# 二维数组堆叠(必须保证列数一致)
print("2D vstack 结果:\n", np.vstack(([[1, 2, 3], [3, 4, 3]], [[1, 3, 4], [2, 4, 5]])))

当需要按批次累积样本或使用 np.array_split 切分数据集后再重新组合时,vstack 能保持原始行的连续性:

arr1_full = np.array([[1, 2], [2, 4], [11, 33], [2, 44], [55, 77], [11, 22], [55, 67], [67, 89]])
splits = np.array_split(arr1_full, 3)

print("分割后的子数组结构:")
for i, part in enumerate(splits):
    print(f"Part {i}:", part)

print("\nvstack 还原结果:\n", np.vstack(splits))

运行后可见原本被切分的矩阵片段成功恢复为完整的垂直堆叠形态。

排错指南与注意事项

在实际调用中,多数报错源于维度校验失败或参数类型混淆。以下是高频陷阱与解决方法:

  1. 维度不匹配 ValueError:若二维数组调用 hstack 时报错,请检查两矩阵的行数(第0轴)是否相等;调用 vstack 则需核对列数(第1轴)。可使用 shape 属性提前打印确认。
  2. 传参格式错误:函数签名要求传入 tup(数组序列)。必须使用括号包裹如 (arr1, arr2) 或列表 [arr1, arr2]。直接使用加号 + 连接数组对象会触发类型异常,列表拼接请使用 [] 包装。
  3. 一维数组边界情况:hstack 对一维数组极其宽容,而 vstack 强制长度相同。若需将不等长的一维数组垂直对齐,应先使用 np.pad() 补齐或转为结构化对象数组。

掌握以上规则后,可避免大部分因形状假设错误导致的运行时中断。建议在实际项目流水线中,配合 assert array.shape[0] == other.shape[0] 等断言提前拦截非法拼接。

以上就是 NumPy 中 np.vstack() 和 np.hstack() 的详细内容,更多关于 Python 数据处理进阶的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。