使用joblib创建一个空的内存映射numpy数组

时间:2015-01-14 03:46:40

标签: python numpy scikit-learn joblib

我有一些我正在使用的相当大的数据集。从本质上讲,我在scikit上运行一些工具 - 学习内存映射的numpy数组,因为它似乎允许我使用比我计算机上的内存更大的数据集。

我更喜欢使用joblib来执行内存映射,因为您只需要指定文件。

但我似乎无法弄清楚如何使用joblib分配一个新的空,比如1亿到200的numpy数组,而不会将所有内容都加载到内存中。

谢谢!

1 个答案:

答案 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.]

这样效率相当低,因为它涉及在磁盘上分配一个巨大的临时数组然后复制它。