numpy数组中的内存管理,python

numpy数组中的内存管理,python,python,arrays,numpy,memory,Python,Arrays,Numpy,Memory,我在处理非常大(>50Gb)的文件时出现内存错误(问题:RAM内存已满) 我的解决方案是:我只想一次读取500 kb的数据并进行处理(然后从内存中删除它,然后再读取500 kb)。还有其他更好的解决办法吗?或者,如果这个解决方案看起来更好,那么如何使用numpy阵列呢 这仅仅是代码的1/4(只是为了一个想法) 当它试图将所有数据放入内存时,此时我得到了内存错误itsef。快速回答 允许将磁盘上的大文件显示为numpy阵列。不知道它是否允许映射大于RAM+swap的文件。值得一试 [关于使用Py

我在处理非常大(>50Gb)的文件时出现内存错误(问题:RAM内存已满)

我的解决方案是:我只想一次读取500 kb的数据并进行处理(然后从内存中删除它,然后再读取500 kb)。还有其他更好的解决办法吗?或者,如果这个解决方案看起来更好,那么如何使用numpy阵列呢

这仅仅是代码的1/4(只是为了一个想法)

当它试图将所有数据放入内存时,此时我得到了内存错误itsef。

快速回答
  • 允许将磁盘上的大文件显示为numpy阵列。不知道它是否允许映射大于RAM+swap的文件。值得一试
  • [关于使用Python进行内存不足工作的演示]()
更长的答案 一个关键问题是您有多少RAM(10GB)以及您正在进行何种处理(需要一次查看数据集中的每个元素,或者需要一次查看整个数据集)


如果是10GB的RAM,您可以让操作系统为您完成艰巨的工作,并增加足够的交换大小以捕获所有数据集。通过这种方式,所有内容都加载到虚拟内存中,但只有一个子集加载到物理内存中,操作系统处理它们之间的转换,因此所有内容看起来就像一个巨大的RAM块。但是,如何增加它是操作系统特有的。

可以在接受数据阵列的任何地方使用memmap对象。给定一个memmap fp,isinstance(fp,numpy.ndarray)返回True

32位系统上的内存映射文件不能大于2GB


当memmap导致文件在文件系统中创建或扩展超过其当前大小时,新部件的内容将不指定。在具有POSIX文件系统语义的系统上,扩展部分将填充零字节。

哪一行引起错误?为什么需要调用
flant()
?我需要进一步处理和操纵数据。例如:我需要确定某个特定数字的位置,然后获取下一个数字的索引,将其存储在数组中并实现一个计数器。非常感谢。我得到了一个简短的理解。我的RAM是8GB,我希望遍历整个数据。我想知道我是否可以继续使用python或切换到其他语言?
  import h5py
  import numpy as np
  import sys
  import time
  import os
  hdf5_file_name = r"test.h5"
  dataset_name = 'IMG_Data_2'

  file = h5py.File(hdf5_file_name,'r+')
  dataset = file[dataset_name]
  data = dataset.value
  dec_array = data.flatten() 
  ........