Google Colab下如何借助磁盘创建100k×100k numpy数组避免RAM崩溃
大尺寸numpy数组磁盘创建与操作解决方案
100000×100000的numpy数组默认采用float64类型,总大小约为74.5GB,远高于Google Colab免费版分配的运行内存上限,因此直接在内存中创建会触发RAM崩溃。
方案1:使用numpy原生memmap(兼容原有操作逻辑)
numpy内置的memmap工具可以直接将数组主体存储在磁盘上,仅将当前操作的分片加载到内存,API和普通numpy数组完全一致,你原有的赋值、累加逻辑不需要做任何修改就能直接使用。
使用示例:
import numpy as np # 配置数组参数 shape = (100000, 100000) # 可根据精度需求调整dtype,float32仅占float64一半的磁盘空间,约37GB dtype = np.float32 # 创建磁盘映射数组,mode='w+'代表读写权限 arr = np.memmap('large_array.npy', dtype=dtype, mode='w+', shape=shape) # 初始化为全0,等价于np.zeros的效果 arr[:] = 0 # 赋值、累加操作和普通numpy数组完全一致 arr[100, :] = 20 arr += 10 # 操作完成后手动刷入磁盘,避免异常退出导致数据丢失 arr.flush() # 后续需要重新加载已存在的数组时使用如下代码即可 # arr = np.memmap('large_array.npy', dtype=dtype, mode='r+', shape=shape)
注意事项:
- 提前确认磁盘空间充足,Colab免费版临时磁盘容量约100GB,满足需求,若需要持久化存储数组可以挂载Google Drive后将文件路径指向Drive目录
- memmap的随机读写性能低于内存数组,建议尽量按块批量操作数据,减少随机IO次数
方案2:稀疏矩阵优化(适用于零元素占比高的场景)
如果你的数组中90%以上的元素都是0,可以直接使用稀疏矩阵存储,不需要占用磁盘空间,操作效率远高于磁盘映射数组:
import numpy as np from scipy.sparse import csr_matrix # 直接创建10万×10万的稀疏全0矩阵 arr = csr_matrix((100000, 100000), dtype=np.float32) # 支持常规赋值、累加操作 arr[0, 100] = 50 arr += 5
内容的提问来源于stack exchange,提问作者easy_peasy
相关产品推荐
相关产品推荐

