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

numpy数组列表行重组的高效实现方法(非循环方式)

最优实现:用Numpy向量化操作替代循环

当然有更高效的实现方式!Numpy的核心优势就是向量化操作,能把Python层面的循环开销降到最低,尤其适合这种数组重组的场景。

核心思路

你的需求本质上是把原列表中所有数组的第i行提取出来,组合成新列表的第i个数组。我们可以通过以下几步完成:

  • 把原列表中的数组堆叠成一个三维Numpy数组
  • 通过切片直接提取对应行的组合,完全避免循环

代码示例

先模拟你的输入场景:

import numpy as np

# 原数组列表
original_list = [
    np.array([[1., 2.], [3., 4.]], dtype=np.float16),
    np.array([[5., 6.], [7., 8.]], dtype=np.float16)
]

然后用简洁的代码完成重组:

# 堆叠数组后,提取所有原数组的第i行组成新数组
stacked = np.stack(original_list)
new_list = [stacked[:, i, :] for i in range(stacked.shape[1])]

验证结果:

print(new_list)
# 输出完全符合预期:
# [array([[1., 2.],
#        [5., 6.]], dtype=float16), array([[3., 4.],
#        [7., 8.]], dtype=np.float16)]

为什么比循环更优?

  • 底层优化:Numpy的堆叠和切片操作都是在C语言层面执行的,避免了Python循环的解释器开销,当数组规模越大(比如原列表有几十个数组、每个数组有上万行),效率提升越明显。
  • 代码简洁:逻辑清晰,核心操作一目了然,可读性更强。

注意事项

这个方法要求原列表中的所有Numpy数组行数相同(这也是你的重组规则的前提),否则堆叠时会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 19:12:43