我正在将20k mat文件中的数据读入数组。 在阅读了大约13k个文件之后,这个过程以“Killed”消息结束。 显然,问题是打开的文件太多了。 我试图找出如何在Python中显式地“关闭”mat文件,但是除了savemat之外,没有找到其他文件,这不是我在本例中需要的。在
如何在python中显式关闭mat文件?在
import scipy.io
x=[]
with open('mat_list.txt','r') as f:
for l in f:
l=l.replace('\n','')
mat = scipy.io.loadmat(l)
x.append(mat['data'])
您可以将打开的文件句柄传递给
scipy.io.loadmat
:离开
with open()
上下文将自动关闭该文件。在你不需要。
loadmat
不使文件保持打开状态。如果给定一个文件名,它会将文件内容加载到内存中,然后立即关闭它。您可以使用@nils werner建议的file对象,但这样做不会带来任何好处。从source code可以看出这一点。在很可能是因为一次有太多的数据而耗尽内存。我要尝试的第一件事是将所有数据加载到一个大numpy数组中。您知道每个文件的大小,以及文件的数量,因此可以预先分配一个大小合适的数组,并将数据写入该数组的片段。如果数组大小有问题,这也会立即告诉您。在
如果内存仍然不足,则需要另一种解决方案。一个简单的解决方案是使用}提供了相似的功能,尽管不是那么无缝。在
dask
。这允许您创建看起来和行为类似于numpy数组的东西,但它存在于文件中而不是内存中。这允许您处理太大而无法放入内存的数据集。bcolz
和{如果没有这些选项,}允许您以增量方式将数据集存储到文件中,而不必一次将整个内容保存在内存中。在
h5py
和{总的来说,我认为这个问题是XY Problem的一个典型例子。一般来说,最好是陈述你的症状,并就这些症状寻求帮助,而不是猜测解决方案是什么,然后请人帮助你实施解决方案。在
相关问题 更多 >
编程相关推荐