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

无需显式循环/推导式创建组合NumPy数组

无需显式循环构造目标数组的方法

当然有更高效的实现方式——利用NumPy的广播机制,完全不用写Python循环,而且底层是C级别的运算,处理长数组时速度会快很多。

核心思路

你的pattern函数本质是给每个x乘上一个固定的5×3权重模板,所以我们可以先把这个模板抽出来,再通过广播让数组a和模板进行元素级相乘,自动完成批量计算。

具体实现

import numpy as np

# 原长数组
a = np.array([1.3, -1.8, 0.3, 11.4])

# 定义pattern对应的权重模板(把x替换为1/-1/0)
template = np.array([
    [1, 0, 0],
    [0, 1, 0],
    [0, 0, 1],
    [1, 1, 1],
    [-1, -1, -1]
])

# 通过扩展a的维度实现广播相乘
out = a[:, np.newaxis, np.newaxis] * template
print(out.shape)  # 输出 (4, 5, 3)

关键细节

  • a[:, np.newaxis, np.newaxis]把原来形状为(N,)的数组变成(N, 1, 1),这样就能和形状为(5,3)的template触发广播规则,最终得到(N,5,3)的结果。
  • 你也可以用a.reshape(-1, 1, 1)代替维度扩展,效果完全一致,看个人编码习惯。
  • 这个方法生成的out和原列表推导式的结果完全相同,但对于超长数组,效率会远高于Python循环。

内容的提问来源于stack exchange,提问作者Nico Schlömer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 10:02:28