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

Numpy数组是否有类似指针的实现?解决大数组内存浪费问题

解决方案:用NumPy广播视图替代数据复制

场景与问题

你有一个n×N的NumPy数组,N约为500000,n会根据使用场景取1或1000。为了避免代码里频繁添加数组形状判断的if语句,同时要保证数组第一维度与代码库中其他数组匹配:

  • 当n=1时,最初采用的np.repeat复制数据方式:
    my_array = np.repeat(np.reshape(my_array[0,:],(1,my_array.shape[1])),1000,axis=0)
    
    会直接复制出1000份数据,占用约9GiB内存,内存浪费严重。你希望保留原始的1×N数组,通过类似指针数组的方式生成1000×N的“虚拟”数组来节省内存。

最优方案:np.broadcast_to()

使用np.broadcast_to()完美解决了这个问题——它不需要创建新的二维数组,只是生成一个共享原始数据的广播视图,既满足了维度匹配的需求,又完全不额外占用内存。

示例代码:

import numpy as np

# 原始1×500000数组
original_arr = np.random.rand(1, 500000)
# 生成1000×500000的广播视图
broadcasted_arr = np.broadcast_to(original_arr, (1000, 500000))

这个视图的行为和真实的1000×500000数组完全一致,所有读写操作都会直接作用在原始数组上,同时不需要添加任何形状判断的分支代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 13:17:06