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

Numpy如何沿多维度重复数组以匹配另一数组的维度

Numpy数组多维度扩展匹配另一数组形状的高效方案

你可以通过numpy内置的广播机制直接完成扩展,完全避免循环操作,效率远高于逐维度repeat的实现,以下是两种常用方案:

方案1:使用np.broadcast_to(最高效,生成视图)

该方案利用numpy的广播规则,无需实际复制数据,仅生成虚拟视图,仅读场景下性能最优:

import numpy as np

a = np.arange(300)
b = np.zeros((300, 10, 20, 40, 50))

# 先给a补全尾部维度,和b的维度数量对齐
a_aligned = a.reshape(a.shape + (1,) * (b.ndim - a.ndim))
# 直接广播到b的形状
c = np.broadcast_to(a_aligned, b.shape)

# 若需要可写的数组,额外调用copy即可
# c = np.broadcast_to(a_aligned, b.shape).copy()

*注意:np.broadcast_to生成的是只读视图,直接修改会报错,有修改需求请调用.copy()生成实际数组。

方案2:使用np.tile(一次性生成可写数组)

如果需要直接得到可修改的实体数组,可以用np.tile一次性完成所有维度的重复:

a_aligned = a.reshape(a.shape + (1,) * (b.ndim - a.ndim))
# 定义各维度重复次数,首维不重复,后续维度和b对应维度长度一致
repeat_times = (1,) + b.shape[1:]
c = np.tile(a_aligned, repeat_times)

两种方案的性能都远优于逐维度循环repeat的实现,维度数量越多提升越明显,且均支持b的维度数量、各维度长度为任意值的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:15:01