matlab - 从大 mat 文件中读取变量

标签 matlab bigdata

我们有 MATLAB mat 文件,每个文件大小约为 12 GB。

这些 mat 文件是 MATLAB 表。我们只想读取表中的一些行,但是对于 12 GB 的 mat 文件,我们必须忍受大约 10 分钟的加载时间。由于我们只想读取文件中的某些行,因此无需将其加载到 MATLAB 即可完成此操作。

matfile 命令会将完整文件加载到内存中:

m=matfile('my_big_fat_file.mat')

因此 lad 花费的时间与加载命令本身相同。

显然 matfile 的优点是使用以下方法在 my_big_fat 文件中快速保存各个变量:

m = matfile('my_big_fat_file.mat','Writable',true);

我的问题是加载整个文件以仅读取几个变量。

另一方面,MATLAB 数据存储命令似乎旨在处理 csv 或图像格式的数据。

非常感谢

最佳答案

使用matfile object 允许直接访问变量,而无需从内存加载整个文件。 保存文件时使用 -7.3 标志很重要,可以提高部分变量的读取效率。

从 mat 文件中读取变量的单行

给定一个带有变量 b 的 matfile 对象 matfileObj,您可以按如下方式读取 b 的第 i 行:

matFileObj = matfile('mFile.mat')
matFileObj.b(1,:);

将 mat 文件转换为 v7.3

将现有 mat 文件转换为高效文件可以按如下方式完成:

load('m.mat');
save('m_v7_3.mat','-v7.3');

完整代码示例

%generating a mat file which contains 4 variables
a=1;
b=rand(3000,3000);
b(1,:) = 0; 
c=rand(3000,3000);
d=rand(3000,3000);
save('mFile.mat','-v7.3');

%acessing variables without loading the enitre structure 
tic
matFileObj = matfile('mFile.mat')
matFileObj.a;
matFileObj.b(i,:);
toc

%acessing variables regularly
tic 
S = load('mFile.mat');
S.a;
S.b(1,:);
toc

结果

Elapsed time is 0.026882 seconds.
Elapsed time is 8.181252 seconds.

关于matlab - 从大 mat 文件中读取变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49533297/

相关文章:

c++ - (MATLAB/C++) 是否可以将函数作为参数传递给 C++ MEX 函数?

matlab - Matlab中如何找到两个网格点之间的所有网格点

matlab - 确定Matlab中的编译器

arrays - 将数组写入单元格

python - 如何使用大小为 m 的滑动窗口将 numpy 数组划分为 n 个子数组?

python - sklearn 和大型数据集

Python 相当于 Matlab 的 clear, close all, clc

java - 如何通过网络运行Hadoop程序

java - Storm java.io.NotSerializableException : when running topology

python - 将带有 Python 的机器学习服务和机器学习功能添加到现有 SQL Server 2017