如何加载对我的机器来说内存太大的 .mat 文件的一部分?

Posted

技术标签:

【中文标题】如何加载对我的机器来说内存太大的 .mat 文件的一部分?【英文标题】:How can I load part of a .mat file that is too big in memory for my machine? 【发布时间】:2013-07-05 07:56:42 【问题描述】:

我有一个要处理的大 .mat 文件,但它太大而无法加载一次。我想分部分加载它,每次只访问重要参数。所以我实际上有两个问题:

    如何在不加载 mat 文件的情况下访问它的变量名称? 如何仅将其中一个加载到工作区?

谢谢!

【问题讨论】:

【参考方案1】:

您可以使用以下命令查看变量列表:

vars = whos('-file','name.mat');

然后只加载你想要的变量,比如列表中的第一个,通过:

load('name.mat', vars(1).name)

【讨论】:

【参考方案2】:

除了按照@natan 的建议从 .mat 文件中加载单个变量外,在最新版本的 MATLAB 中,您还可以使用 matfile 对象仅加载单个变量的部分内容。

例如,你可以说:

myFile = matfile('path\to\the\mat\file');
loadedData = myfile.myVarName(100:200, 500:600);

您将从文件myFile 中仅加载变量myVarName 的一部分。


编辑:

matfile 对象还具有 sizewhowhos 方法,因此您可以在尝试加载位之前确定文件包含的变量的名称和大小。

【讨论】:

需要注意的是matfile只支持MAT-file v7.3(基于HDF5)进行部分加载,否则回退到加载整个变量。

以上是关于如何加载对我的机器来说内存太大的 .mat 文件的一部分?的主要内容,如果未能解决你的问题,请参考以下文章

加载对于 RAM 来说太大的 .npy 文件

如何从 Matlab 中的 .mat 文件中仅加载一个单元格的条目?

如何在我的 numpy 数组中找到 NaN/infinity/对于 dtype('float64') 来说太大的值?

如何从 Kaggle 将一个太大的 Kaggle 数据集的选定文件加载到 Colab 中

jvm内存快照dump文件太大,怎么分析

jvm内存快照dump文件太大,怎么分析