【问题标题】:Memory mapped file for numpy arraysnumpy 数组的内存映射文件
【发布时间】:2014-11-29 23:51:13
【问题描述】:

我需要读取存储在内存映射文件中的巨大 numpy 数组的一部分,处理数据并重复数组的另一部分。整个 numpy 数组占用大约 50 GB,而我的机器有 8 GB 的 RAM。

我最初使用 numpy.memmap 创建了内存映射文件,方法是读取大量较小的文件并处理它们的数据,然后将处理后的数据写入 memmap 文件。在创建 memmap 文件期间,我没有内存问题(我定期使用 memmap.flush())。以下是我创建内存映射文件的方法:

mmapData = np.memmap(mmapFile,mode='w+', shape=(large_no1,large_no2))
for i1 in np.arange(numFiles):
   auxData = load_data_from(file[i1])
   mmapData[i1,:] = auxData
   mmapData.flush() % Do this every 10 iterations or so

但是,当我尝试访问 memmap 文件的一小部分(

mmapData = np.memmap(mmapFile, mode='r',shape=(large_no1,large_no2))
aux1 = mmapData[5,1:1e7]

我认为使用 mmap 或 numpy.memmap 应该允许我访问大量数组的一部分,而无需尝试将整个内容加载到内存中。我错过了什么?

我是否使用了错误的工具来访问存储在磁盘中的大型 numpy 数组 (> 20 GB) 的部分内容?

【问题讨论】:

  • 我还没有复制它,但这似乎也让我感到惊讶。我认为切片只是胖指针......你确定执行不会超过 aux1 分配吗?如果它超过了分配,并且您正在阅读它,由于缓存行大于 5 个字节(通常是 64 个字节),加载的内存将比您预期的要多,具体取决于您是否使用 order='C '或'F'。但这仍然不足以满足 8GB 可用 RAM 的机器,所以这不是答案。

标签: numpy memory large-files large-data


【解决方案1】:

您是否正在关注虚拟内存消耗,而不是物理内存消耗,而减速是来自其他原因?

【讨论】:

    猜你喜欢
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    • 2016-02-23
    • 1970-01-01
    • 2020-01-31
    • 2020-04-19
    相关资源
    最近更新 更多