Mic*_*ael 4 python numpy memory-mapped-files joblib
是否可以在numpy.memmap不知道形状的情况下加载a 并仍然恢复数据的形状?
data = np.arange(12, dtype='float32')
data.resize((3,4))
fp = np.memmap(filename, dtype='float32', mode='w+', shape=(3,4))
fp[:] = data[:]
del fp
newfp = np.memmap(filename, dtype='float32', mode='r', shape=(3,4))
Run Code Online (Sandbox Code Playgroud)
在最后一行中,我希望能够不指定形状并仍然使变量newfp具有形状(3,4),就像它会发生一样joblib.load.这可能吗?谢谢.
除非该信息已明确存储在某个文件中.就此np.memmap而言,该文件只是一个扁平的缓冲区.
我建议使用np.save持久化numpy数组,因为这也保留了指定其维度,dtypes等的元数据.您还可以.npy通过将memmap_mode=参数传递给memfile来加载文件np.load.
joblib.dump使用酸洗的组合来存储通用Python对象并np.save存储numpy数组.
要初始化由.npy文件支持的空内存映射阵列,您可以使用numpy.lib.format.open_memmap:
import numpy as np
from numpy.lib.format import open_memmap
# initialize an empty 10TB memory-mapped array
x = open_memmap('/tmp/bigarray.npy', mode='w+', dtype=np.ubyte, shape=(10**13,))
Run Code Online (Sandbox Code Playgroud)
即使阵列大于总可用磁盘空间(我的笔记本电脑只有500GB SSD,但我刚刚创建了一个10TB的memmap),这可能会让您感到惊讶.这是可能的,因为创建的文件是稀疏的.
发现的信用open_memmap应该转到kiyo之前的答案.