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

如何将np.repeat结果写入已分配内存以避免内存重分配?

如何将np.repeat(或等效操作)的结果写入已分配的内存空间?

我需要把np.repeat(或等效函数)的输出直接写入一个已创建的大数组中——很多numpy函数都支持out=参数实现这种原地写入。这么做的原因是我有一个尺寸匹配且后续不再使用的超大数组,复用它的内存可以避免大量内存重分配开销。

我试过下面的写法,但没提升分配速度:

diff_da1[:,:,:] = np.repeat(np.linalg.norm(diffs, axis=2)[:, :, None], repeats=d, axis=2)
dist_point_vertex = diff_da1

用广播技巧有轻微提速,但速度还是不够理想:

diff_da1[:,:,:] = np.linalg.norm(diffs, axis=2)[:,:,None]
dist_point_vertex = diff_da1

补充提示:这本质上是一个更通用的问题——如何将涉及多个numpy数组的运算结果,写入和这些数组无关的已分配内存空间?


更新:最小可复现代码示例

vector_set_1 = np.random.rand(1500,2)
vector_set_2 = np.random.rand(1500,2)

# 预先分配目标内存空间
first_allocation = np.einsum('ij,kj->ik', vector_set_1, vector_set_2)

# 用first_allocation完成一些操作

# 生成需要扩展形状的目标数组
object_to_be_repeated = np.einsum('ij,ij->i', vector_set_1, vector_set_1)
first_allocation[:,:] = object_to_be_repeated[:,None]

# 对新值执行原地操作
first_allocation.__iadd__(first_allocation)

目前测试下来最快的实现方式是:

np.copyto(first_allocation, object_to_be_repeated[:, None])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 15:00:10