当MATLAB数据文件超出其内存时

当MATLAB数据文件超出其内存时,matlab,memory,Matlab,Memory,有一个500000000x5的矩阵 这些数据的样本如下: 10106:048407 1 01 06:1 48407 . . . 865850 31 23:5 158684493 每列表示[区域编号日期小时:分钟数据量] 我想完全加载它们,然后从它们的第5列值生成另一个865850x4464矩阵。在这个新的矩阵中,行坚持区域_数。每列表示根据时间优先级的数据量 这是我写的 clear all; close all; fileID=fopen('data2.txt','r'); Data=fsca

有一个500000000x5的矩阵

这些数据的样本如下:

10106:048407 1 01 06:1 48407 . . . 865850 31 23:5 158684493

每列表示[区域编号日期小时:分钟数据量]

我想完全加载它们,然后从它们的第5列值生成另一个865850x4464矩阵。在这个新的矩阵中,行坚持区域_数。每列表示根据时间优先级的数据量

这是我写的

clear all; close all;
fileID=fopen('data2.txt','r');
Data=fscanf(fileID, '%d %d %d:%d %d',[5 100000]);
Data = Data';
Zeros = zeros(4000, 4464);
DataA = Data(:,1); % indexs
DataB = Data(:,2); % dates
DataC = Data(:,3); % hours
DataD = Data(:,4); % minutes
DataE = Data(:,5); % data
for m=1:40000
    r = DataA(m);
    c = (DataB(m)-1)*24*6 + DataC(m)*6 + DataD(m);
    Zeros(r,c) = DataE(m);
end 
我无法完成它,因为矩阵太大,无法立即加载。 它克服了MATLAB的内存限制

请帮帮我


谢谢~

要解决您的问题,使用matfile命令可能是最好的选择。它允许您将数据直接写入文件系统上的mat文件,但可以像访问变量一样访问它

如果我正确理解了您的数据,那么具有相同索引的所有行彼此相邻,并且具有相同索引的所有数据都很小,足以容纳您的内存

读取索引为1的所有数据 像上面那样处理它,创建一行您想要的矩阵 将此行写入MAT文件 继续下一个索引,直到到达末尾
这相当于47GiB的数据量。您必须在较小的块中处理它,并将每个块的结果写入文件系统。非常感谢~但是我如何将这些块分离并将结果保存在其中?您在data2.txt中的数据是如何排序的?谢谢~!!像这样。1 01 06:0 48407 ; 1 01 06:1 48407 ~~ ; 865850 31 23:4 2591862482谢谢~!!这样地。。。1 01 06:0 484071 01 06:1 48407 . . . 865850 31 23:4 2591862482 865850 31 23:5 1586884493... 无法换行…谢谢~!祝你今天愉快