17人参与 • 2026-01-07 • websocket
在使用 numpy 进行数据处理时,我们经常会遇到把多个数组按照列(column)组合成一个矩阵的需求。最常见的场景包括:
很多人第一时间会想到 np.hstack,但其实 np.column_stack 才是真正为“列拼接”设计的函数,尤其对 1d 数组的处理更加符合直觉。
本文将从原理、差异、示例到图解,全面讲解 np.column_stack 的使用。
np.column_stack 的作用是:
将多个数组以“列”的方式拼接成一个新的二维数组。
如果输入数组是 1d,会先转换为列向量再拼接。
函数签名非常简单:
numpy.column_stack(tup)
很多初学者会把 column_stack 和 hstack 混用,但它们的行为有显著不同:
| 函数 | 输入 1d 数组时 | 输入 2d 数组时 | 用途 |
|---|---|---|---|
| column_stack | 自动转成列向量,并按列组合 | 按列组合(与 hstack 等价) | 组合特征列、更自然的列拼接 |
| hstack | 直接水平拼接成一行 | 按列组合 | 更接近简单拼接 |
简而言之:
👉 如果你把 1d 数组当成“数据列(column)”,应该用 column_stack。
import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) result = np.column_stack((a, b)) print(result)
输出:
[[1 4]
[2 5]
[3 6]]
解释:
这恰好符合我们对“合并两个特征列”的直觉。
a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6], [7, 8]]) result = np.column_stack((a, b)) print(result)
输出:
[[1 2 5 6]
[3 4 7 8]]
二维数组时,column_stack 和 hstack 表现相同——横向拼接。
a = np.array([1, 2, 3]) b = np.array([[4], [5], [6]]) result = np.column_stack((a, b)) print(result)
输出:
[[1 4]
[2 5]
[3 6]]
1d 会自动转换为列向量,非常方便。
下面是一个更直观的图示,有助于你彻底理解 column_stack 的工作原理:
1d → 列向量 → 按列组合

图中左侧是两个 1d 数组,它们被转换成两列,再拼成一个 2d 数组。
这个可视化呈现出了 column_stack 的核心:
👉 把每个输入都当成“一列”,然后拼接。
age = np.array([18, 25, 32]) height = np.array([170, 180, 165]) x = np.column_stack((age, height))
即:
[[ 18 170]
[ 25 180]
[ 32 165]]
这就是典型的 特征矩阵 x。
gt = np.array([1, 0, 1]) pred = np.array([1, 1, 0]) np.column_stack((gt, pred))
name = ["a", "b", "c"] score = [90, 80, 95] table = np.column_stack((name, score))
| 函数 | 按列还是按行? | 对 1d 数组的处理 | 最适合用途 |
|---|---|---|---|
| column_stack | 按列 | 自动变“列” | 构建数据矩阵、特征拼接 |
| hstack | 按行水平拼接 | 直接拼成一维 | 简单拼接 |
| vstack | 按行堆叠 | 变为行向量 | 竖向堆数据 |
| stack | 增加新维度 | 完全自定义 axis | 自由组合三维/四维结构 |
建议记忆:
column_stack = feature_columns 的组合工具
对于机器学习、图像关键点、gt+pred 数据结构来说特别适用。
到此这篇关于深入理解numpy 的 np.column_stack的实现的文章就介绍到这了,更多相关numpy np.column_stack内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论