You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何快速将二维NumPy数组与一维NumPy数组合并为指定结构的数组?

如何快速将二维NumPy数组与一维NumPy数组合并为指定结构的数组?

嘿,这个需求我熟!要把二维NumPy数组的每一行和一维数组的对应元素配对成你要的那种结构,最快的方式肯定是用NumPy原生的向量化操作,别用循环或者列表推导——大数据量下慢得离谱。

先明确下输入情况:假设A是形状为(N, M)的二维NumPy数组(比如你例子里M=3),B是形状为(N,)的一维NumPy数组,目标是生成C,其中每个元素都是[A的第i行, B的第i个元素]。

最快的NumPy向量化实现

如果希望结果是NumPy数组类型,直接用stack结合维度扩展就能搞定,完全不用循环:

import numpy as np

# 先拿你的示例数据试试
A = np.array([[1, 3, 6], [2, 2, 5]])
B = np.array([2, 6])

# 把B扩展成二维数组(形状从(N,)变成(N,1)),然后和A在第1个轴上堆叠
C = np.stack([A, B[:, np.newaxis]], axis=1)

# 看看结果
print(C[0])  # 输出: array([[1, 3, 6], [2]])
print(C[1])  # 输出: array([[2, 2, 5], [6]])

这样得到的C是NumPy数组,形状为(N, 2),每个位置的元素正好对应你要的结构,而且完全是向量化操作,速度拉满。

要是需要严格的混合结构(数组+标量)

如果你希望每个元素里的第二个值是纯标量,而不是长度为1的数组,可以用NumPy的结构化数组,它能存储不同类型/维度的元素,同时保持NumPy的高效性:

# 定义结构化数据类型:第一个字段是3个整数的数组,第二个是单个整数
dtype = [('row_from_A', np.int32, 3), ('val_from_B', np.int32)]
C = np.empty(len(A), dtype=dtype)

# 批量赋值,比循环快多了
C['row_from_A'] = A
C['val_from_B'] = B

# 访问起来也很方便
print(C[0])  # 输出: ([1, 3, 6], 2)
print(C[0]['row_from_A'])  # 输出: [1 3 6]
print(C[0]['val_from_B'])  # 输出: 2

小数据量图省事的方法

如果数据量很小,不用追求极致性能,列表推导也能快速搞定,写法简单直观:

C = [[A[i], B[i]] for i in range(len(A))]
print(C)  # 输出: [[array([1, 3, 6]), 2], [array([2, 2, 5]), 6]]

但注意哦,数据量大的时候这种Python级别的循环会比NumPy向量化操作慢很多,谨慎使用。

备注:内容来源于stack exchange,提问作者Geremia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 15:04:35