是否可以在不知道形状的情况下加载numpy.memmap
并恢复数据的形状?在
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))
在最后一行中,我希望能够不指定形状,但仍然获得变量newfp
,使其具有形状(3,4)
,就像使用joblib.load
时一样。这可能吗?谢谢。在
numpy.memmap
的另一种选择是tifffile.memmap
:
^{pr2}$newArray
创建的文件具有以下值:现在让我们回顾一下:
印刷品:
@ali\m中的answer完全有效。我想谈谈我个人的喜好,以防对任何人有帮助。我总是以形状作为前2个元素开始我的memmap数组。这样做很简单:
或者更简单:
^{pr2}$然后可以很容易地将数组读入:
除非该信息被显式地存储在文件的某个地方。就^{} 而言,该文件只是一个平面缓冲区。在
我建议使用^{} 来持久化numpy数组,因为这也保留了指定其维度、数据类型等的元数据。您还可以通过将} 来将
memmap_mode=
参数传递给^{.npy
文件加载为memmap。在^{} 结合使用pickling来存储泛型Python对象,
np.save
来存储numpy数组。在要初始化由
.npy
文件支持的空内存映射数组,可以使用numpy.lib.format.open_memmap
:您可能会惊讶于这样一个事实:即使阵列大于总可用磁盘空间(我的笔记本电脑只有500GB的SSD,但我刚刚创建了一个10TB的memmap)。这是可能的,因为创建的文件是sparse。在
发现
open_memmap
的功劳应归于kiyo's previous answer here。在相关问题 更多 >
编程相关推荐