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

NumPy中对应子数组追加合并:最快实现方法

最快实现方式推荐

针对百万次执行的需求,使用Numba JIT编译循环是最优方案,相比纯Python列表推导或numpy内置函数,能大幅提升执行速度。以下是具体实现:

1. 核心实现代码

import numpy as np
import numba as nb

@nb.njit
def concat_obj_arrays(arr1, arr2):
    # 预分配结果数组,避免动态扩容开销
    result = np.empty(arr1.shape, dtype=object)
    for i in range(arr1.shape[0]):
        # 合并对应位置的子数组
        result[i] = np.concatenate((arr1[i], arr2[i]))
    return result

# 示例输入
array1 = np.array([np.array([1, 2, 3]), np.array([4, 5, 6]), np.array([7, 8, 9])], dtype=object)
array2 = np.array([np.array([9, 8]), np.array([0]), np.array([12])], dtype=object)

# 生成结果
array_final = concat_obj_arrays(array1, array2)

2. 为什么这个方案最快?

  • Numba JIT编译:将Python循环转换为机器码执行,消除了纯Python循环的解释器开销,百万次重复执行时优势极其明显。
  • 预分配内存:提前创建结果数组result,避免动态添加元素带来的内存重新分配开销。
  • 使用np.concatenate:相比np.append,concatenate直接合并数组,无需额外的数组复制操作,效率更高。

3. 对比其他方案的劣势

  • 纯列表推导式:
    array_final = np.array([np.concatenate((a, b)) for a, b in zip(array1, array2)], dtype=object)
    
    每次执行都要经历Python循环的解释器开销,百万次执行时速度远慢于Numba方案。
  • np.vectorize:本质是Python循环的封装,并没有真正实现向量化加速,效率和列表推导式接近,甚至更差。

4. 注意事项

  • 首次调用concat_obj_arrays时会触发Numba编译,耗时略长,但后续百万次执行均为编译后的机器码速度,整体效率极高。
  • 确保输入的arr1和arr2形状一致,且每个元素都是numpy数组(符合题目给定的输入格式)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:57:16