gpt4 book ai didi

python - 在不知道形状的情况下加载 np.memmap

转载 作者:太空宇宙 更新时间:2023-11-03 12:45:36 26 4
gpt4 key购买 nike

是否可以在不知道形状的情况下加载 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 会发生这种情况。这可能吗?谢谢。

最佳答案

除非该信息已明确存储在某处的文件中,否则不会。至于np.memmap就文件而言,它只是一个 FlatBuffers 。

我建议使用 np.save持久化 numpy 数组,因为这也保留了指定其维度、数据类型等的元数据。您还可以通过将 memmap_mode= 参数传递给将 .npy 文件加载为 memmap np.load .

joblib.dump使用 pickling 的组合来存储通用 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,))

您可能会对这样的事实感到惊讶,即使阵列大于总可用磁盘空间(我的笔记本电脑只有 500GB 的 SSD,但我刚刚创建了一个 10TB 的内存映射)。这是可能的,因为创建的文件是 sparse .

发现 open_memmap 的功劳应该转到 kiyo's previous answer here .

关于python - 在不知道形状的情况下加载 np.memmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36749082/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com