我有一些我正在使用的相当大的数据集。从本质上讲,我在scikit上运行一些工具 - 学习内存映射的numpy数组,因为它似乎允许我使用比我计算机上的内存更大的数据集。
我更喜欢使用joblib来执行内存映射,因为您只需要指定文件。
但我似乎无法弄清楚如何使用joblib分配一个新的空,比如1亿到200的numpy数组,而不会将所有内容都加载到内存中。
谢谢!
答案 0 :(得分:0)
我认为您可以通过使用np.memmap
分配临时数组,然后使用joblib.dump
保存它来实现此目的:
import numpy as np
from joblib import dump, load
import os
# allocate temporary memmaped array
init_pth = '/tmp/empty.mm'
mm = np.memmap(init_pth, dtype=np.double, mode='w+', shape=(1E8, 2E2))
# write some values to the first row
mm[0, :5] = np.arange(5)
# dump to joblib format
mmap_pth = '/tmp/test.mmap'
dump(mm, mmap_pth, compress=0)
# we can now delete the temporary array
os.remove(init_pth)
# load the memmap using joblib
mm2 = load(mmap_pth, mmap_mode='r+')
# print the first 5 values
print(mm2[0, :5])
# [ 0. 1. 2. 3. 4.]
这样效率相当低,因为它涉及在磁盘上分配一个巨大的临时数组然后复制它。