我有一个巨大的numpy 3D张量存储在我的磁盘上的文件中(我通常使用它读取np.load
).这是一个二进制.npy
文件.在使用时np.load
,我很快就结束了大部分的记忆.
幸运的是,在程序的每次运行中,我只需要一定量的巨大张量.切片具有固定的尺寸,其尺寸由外部模块提供.
最好的方法是什么?我能想出的唯一方法是将这个numpy
矩阵存储到MySQL数据库中.但我敢肯定有很多更好/更简单的方法.我也很乐意以不同的方式构建我的3D张量文件,如果有帮助的话.
如果我的张量在本质上是稀疏的,答案会改变吗?
Aar*_*ron 24
numpy.load
正常使用,但一定要指定mmap_mode
关键字,以便将数组保存在磁盘上,并且在访问时只将必要的位加载到内存中.
mmap_mode: {None,'r +','r','w +','c'},可选如果不是None,则使用给定模式对文件进行内存映射(有关模式的详细说明,请参阅numpy.memmap) ).内存映射阵列保留在磁盘上.但是,它可以像任何ndarray一样访问和切片.内存映射对于访问大型文件的小片段而不将整个文件读入内存特别有用.
这些模式在numpy.memmap
以下方面被描述:
mode: {'r +','r','w +','c'},可选文件在此模式下打开:'r'打开现有文件以供阅读.'r +'打开现有文件进行读写.'w +'创建或覆盖现有文件以进行读写.'c'Copy-on-write:赋值会影响内存中的数据,但更改不会保存到磁盘.磁盘上的文件是只读的.
*请务必不要使用'w +'模式,因为它会删除文件的内容.
归档时间: |
|
查看次数: |
7836 次 |
最近记录: |