2015-04-04 41 views
0

有的5億X 5.MATLAB數據文件時,它接管其存儲器

基質和該數據的樣本是這樣的:

1 01 06:0 48407 1 01 06:1 48407 。 。 。 865850 31 23:5 1586884493

每一列手段[area_number日時:分amount_of_data]

欲完全加載它們,之後從它們的第五列中的值進行另一個865850 X 4464矩陣。在這個新的矩陣中,行堅持area_number。根據時間優先級,每列表示amout_of_data。

這就是我寫的。

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的內存限制。

請幫我...

謝謝〜!

+1

這就是很多數據(47GiB)。您必須以較小的塊處理它,並將每個塊的結果寫入文件系統。 – Daniel 2015-04-05 08:35:08

+0

非常感謝〜但是我怎樣才能隔離塊並保存結果呢? – 2015-04-06 12:25:57

+0

您如何在'data2.txt'中訂購數據? – Daniel 2015-04-06 13:31:21

回答

0

要解決您的問題,使用matfile命令可能是最佳選擇。它允許您直接將數據寫入文件系統上的mat-file,但可以像訪問變量一樣訪問它。

如果我理解了您的數據,那麼所有具有相同索引的行都彼此相鄰,並且具有相同索引的所有數據都足夠小以適合您的內存。

  1. 閱讀與索引的所有數據1
  2. 過程中它就像你前面所做的那樣,創建您打算矩陣的一個行
  3. 寫此行到您的matfile
  4. 下一個指數繼續直到到達end
+0

謝謝〜!祝你今天愉快 – 2015-04-09 19:08:15

相關問題