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

将两个NumPy矩阵合并为逐元素元组的最快实现方法

快速合并两个NumPy数组为逐元素元组矩阵(Python 2)

嘿,这个需求我之前刚好处理过!在Python 2里要高效实现两个同形状NumPy数组的逐元素元组合并,下面给你推荐几个最快的方案,按效率从高到低排序:

1. 利用NumPy结构化数组(最快)

这个方法借助NumPy底层的结构化数组实现,完全避免Python层面的循环,速度最优:

import numpy as np

# 示例数组
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])

# 合并为结构化数组
structured_arr = np.core.records.fromarrays([a, b], names='val1,val2')
# 转换为元组类型的object数组
result = structured_arr.view('O').reshape(a.shape)

执行后result就是你想要的逐元素元组矩阵:

array([[(1, 5), (2, 6)],
       [(3, 7), (4, 8)]], dtype=object)

2. Stack+转列表(代码更直观)

如果追求代码可读性,这个方法也很高效,适合中小型数组:

import numpy as np

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])

# 沿最后一维堆叠数组
stacked = np.stack([a, b], axis=-1)
# 转成列表再转回object类型数组
result = np.array(stacked.tolist(), dtype=object)

这个方法的本质是先把两个数组堆叠成(m,n,2)的形状,再通过tolist()自动把每个子数组转成元组,最后转回NumPy数组。

❌ 不推荐:Python嵌套循环

千万不要用嵌套循环逐个赋值,这种方法在数组规模稍大时速度会慢到离谱,比如:

# 效率极低,仅作反面示例
result = np.empty(a.shape, dtype=object)
for i in range(a.shape[0]):
    for j in range(a.shape[1]):
        result[i,j] = (a[i,j], b[i,j])

总结一下:如果追求极致速度,优先用结构化数组的方法;如果想代码更易懂,选Stack+转列表的方案,两者在Python 2下都能完美运行。

内容的提问来源于stack exchange,提问作者ru111

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:15:33