在 Matlab 中使用大矩阵

Posted

技术标签:

【中文标题】在 Matlab 中使用大矩阵【英文标题】:Using big matrix in Matlab 【发布时间】:2013-08-08 18:20:41 【问题描述】:

我想使用一些无法放入 RAM 内存的大矩阵。我的矩阵并不稀疏。 我需要一些批处理\块处理或在线机器学习算法。

我需要什么: 1.从存储在硬盘驱动器上的大矩阵中读取一些数据块(可以放入RAM),最好我想像普通的matlab矩阵一样访问它。 2.将一些数据块附加到存储在磁盘上的大矩阵的末尾。

【问题讨论】:

在使用块之前,您是否尝试过使用比默认 double 更“经济”的数据类型? 我们在谈论多少数据? 数据量无关紧要我需要“接口”来处理大矩阵,例如对于我的应用程序,我想将块的大小限制为 32Mb\1Gb\ 或其他任何东西,即使我的电脑有 8Gb 的内存,所以我需要一种方法来访问存储在硬盘上的部分数据。但无论如何,如果您感兴趣的数据大约是几十到几百 Gb。 【参考方案1】:

@geek_girl

感谢那些 cmets。文件和矩阵实用程序的代码在 SourceForge 上:

https://sourceforge.net/projects/waterloo/files/Waterloo%20MATLAB%20File%20and%20Matrix%20Utilities/

整个项目的 Git 存储库位于:

https://sourceforge.net/p/waterloo/beta/ci/master/tree/

【讨论】:

【参考方案2】:

Matlab Central File Exchange 上有一个出色的项目,可以解决大量数据点(或大型矩阵)的问题。 这是 Malcolm Lidierth 的 Project Waterloo 文件和矩阵实用程序

http://www.mathworks.co.uk/matlabcentral/fileexchange/12250-project-waterloo-file-and-matrix-utilities

【讨论】:

【参考方案3】:

您会在here 矩阵的读/写部分找到答案.mat

%read
matObj = matfile('myBigData.mat');
loadedData = matObj.X(1:4,1:4);

%write
matObj.X(81:100,81:100) = magic(20);

编辑

这是一些显示附加功能的代码

A = ones(10,10);
save('A.mat', 'A','-v7.3');
clear A

matObj = matfile('A.mat','Writable',true);
matObj.A(8:10,8:10) = ones(3,3) * 3;       %modify
matObj.A(11,:) = ones(1,10)*4;             %append

disp(matObj.A)

.mat 的完整 matlab 帮助(包括限制)是 here。

【讨论】:

似乎使用这种方法我无法附加到现有矩阵,但我需要创建新变量,所以它可以工作,但我必须将数据存储在 chinks 中? 您可以将一些数据附加到矩阵中。请参阅编辑后的答案。

以上是关于在 Matlab 中使用大矩阵的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Matlab 中保存非常大的矩阵

使用 mex 将一个大矩阵从 Matlab 传递到 C:Matlab 崩溃

在 MatLab 中保存矩阵

如何在matlab中使用PCA减少矩阵维数? [复制]

将矩阵保存在磁盘上以供以后在 Matlab 中使用

求助!!!MATLAB如何利用小矩阵生成大矩阵