0

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

我有点喜欢 joblib 来做内存映射,因为你只需要指定文件。

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

谢谢!

4

1 回答 1

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

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

于 2015-01-14T14:30:01.210 回答