首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在python中加载大型.mat文件?

如何在python中加载大型.mat文件?
EN

Stack Overflow用户
提问于 2016-08-25 19:35:06
回答 1查看 3.4K关注 0票数 7

我有非常大的.mat文件(~ 1.3GB),我正在尝试加载我的IPython代码(IPython笔记本)。我试过:

代码语言:javascript
运行
复制
import scipy.io as sio
very_large = sio.loadmat('very_large.mat')

我的笔记本电脑有8GB内存挂起。我打开了系统监视器,发现内存消耗稳步增加到7GB,然后系统就结冰了。

我做错了什么?有什么建议吗?

编辑:

关于数据的更多详细信息:下面是数据的链接:http://ufldl.stanford.edu/housenumbers/

我感兴趣的特殊文件是extra_32x32.mat。从描述:加载.mat文件创建了两个变量:x是包含图像的四维矩阵,y是类标签的向量。为了访问这些图像,X(:,i)给出了带有类标签y(i)的第32 by-32 RGB图像。

因此,例如,在以下列方式加载时,来自同一页(test_32x32.mat)的较小的test_32x32.mat文件:

代码语言:javascript
运行
复制
SVHN_full_test_data = sio.loadmat('test_32x32.mat')
print("\nData set = SVHN_full_test_data")
for key, value in SVHN_full_test_data.iteritems():
    print("Type of", key, ":", type(SVHN_full_test_data[key]))
if str(type(SVHN_full_test_data[key])) == "<type 'numpy.ndarray'>":
    print("Shape of", key, ":", SVHN_full_test_data[key].shape)
else:
    print("Content:", SVHN_full_test_data[key])

生产:

代码语言:javascript
运行
复制
Data set = SVHN_full_test_data
Type of y : <type 'numpy.ndarray'>
Shape of y : (26032, 1)
Type of X : <type 'numpy.ndarray'>
Shape of X : (32, 32, 3, 26032)
Type of __version__ : <type 'str'>
Content: 1.0
Type of __header__ : <type 'str'>
Content: MATLAB 5.0 MAT-file, Platform: GLNXA64, Created on: Mon Dec  5 21:18:15 2011
Type of __globals__ : <type 'list'>
Content: []
EN

回答 1

Stack Overflow用户

发布于 2018-02-11 11:19:43

这个答案取决于两个假设:

  • .mat文件保存为MAT版本7.3 (似乎与hdf5 5兼容。,尽管MathWorks无法保证),也可以通过直接写入hdf5格式保存(使用MATLAB的hdfwrite())。
  • 您可以在python中导入和使用其他第三方包,即熊猫

方法

考虑到这些假设,我使用的方法是:

  1. 确保.mat文件保存到与hdf5兼容的表单中。这可能意味着使用MATLAB的matfile()来转换它,它不会将其全部加载到磁盘上,或者可以在一台拥有更多内存的机器上完成一次。
  2. 使用熊猫将符合hdf5 5的.mat文件的一部分读入数据框架。
  3. 在python中使用数据框架进行后续分析。

备注:

熊猫的数据框架在一般情况下都能很好地工作。因此,如果您可以将数据读取到一个框架中,那么您很可能可以从那里使用它来做您想做的事情。

这个问题的答案向您展示了如何根据条件(索引范围或某些逻辑条件,例如something=somethingelse),一次只将一部分hdf5数据文件读入内存(熊猫数据帧)。

小咆哮

MATLAB已经支持它的最新版本7.3 MAT文件12年了,但仍然没有使用它作为标准版本保存到(这是一个磁盘空间问题,v7.3在某些情况下更大,但使用更多用途)-所以任何使用默认MATLAB设置的人都不会生成v7.3 matfile。12年过去了,我们有大量的磁盘空间,但这类事情仍然会造成问题。是时候升级您的默认标志了,MathWorks!

希望能帮上忙

汤姆

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39153427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档