Python 使用joblib创建空内存映射numpy数组

Python 使用joblib创建空内存映射numpy数组,python,numpy,scikit-learn,joblib,Python,Numpy,Scikit Learn,Joblib,我正在处理一些相当大的数据集。基本上,我正在运行scikit中的一些工具,这些工具在内存映射的numpy阵列上学习,因为它似乎允许我处理比计算机内存所允许的更大的数据集 我有点喜欢使用joblib来进行内存映射,因为您只需要指定文件 但我似乎不知道如何分配一个新的空数组,比如说仅使用joblib而不将所有内容加载到内存中的1亿乘200个numpy数组 谢谢 我认为您可以通过使用分配一个临时数组,然后使用joblib.dump保存它: 不过,这是相当低效的,因为它需要在磁盘上分配一个巨大的临时阵列

我正在处理一些相当大的数据集。基本上,我正在运行scikit中的一些工具,这些工具在内存映射的numpy阵列上学习,因为它似乎允许我处理比计算机内存所允许的更大的数据集

我有点喜欢使用joblib来进行内存映射,因为您只需要指定文件

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


谢谢

我认为您可以通过使用分配一个临时数组,然后使用joblib.dump保存它:


不过,这是相当低效的,因为它需要在磁盘上分配一个巨大的临时阵列,然后复制它。

对。但是,您仍然必须首先运行np.memmap,因此您需要分配2个数组,而不是一个数组。有办法解决这个问题吗?
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.]