我有一個大約80MB的文本文件。它有2列和6e6左右的行。我想將數據導入到MATLAB中,但是與加載函數有關的數據過多。我一直在玩fopen函數,但不能得到任何工作。將大量數據導入MATLAB?
理想情況下,我想採取第一列數據和導入,並最終在MATLAB中的一個大型數組中。如果這是不可能的,我想分成長度爲34,013的數組。我也想爲第二列數據做同樣的事情。
我有一個大約80MB的文本文件。它有2列和6e6左右的行。我想將數據導入到MATLAB中,但是與加載函數有關的數據過多。我一直在玩fopen函數,但不能得到任何工作。將大量數據導入MATLAB?
理想情況下,我想採取第一列數據和導入,並最終在MATLAB中的一個大型數組中。如果這是不可能的,我想分成長度爲34,013的數組。我也想爲第二列數據做同樣的事情。
fileID = fopen('yourfilename.txt');
formatSpec = '%f %f';
while ~feof(fileID)
C = textscan(fileID,formatSpec,34013);
end
希望這有助於..
編輯:
您得到錯誤的原因是因爲C有兩列。所以你需要分別拿出這些列並處理它們。
例如:
column1data = reshape(C(:,1),301,113);
column2data = reshape(C(:,2),301,113);
This Works。如何獲取34013的捆綁包,並且每次使用col 1和2創建一個301x113的矩陣?重塑功能不斷給我錯誤:已知尺寸的產品,34013,不可分爲總數 元素,2. – Prefoninsane
編輯答案,看看是否有幫助.. – lakesh
hmmmm給我錯誤:RESHAPE數量元素不得改變。 – Prefoninsane
您也可以考慮將文件轉換爲二進制格式,如果您的數據文件是不是你想要加載它每次換水。然後你會更快地加載它。 或者您可以在下面的功能中進行「透明二進制轉換」。只有第一次加載數據會很慢。隨後的所有將會很快。
function Data = ReadTextFile(FileName,NColumns)
MatFileName = sprintf('%s.mat',FileName); % binary file name
if exist(MatFileName,'file')==2 % if it exists
S = load(MatFileName,'Data'); % load it instead of
Data = S.Data; % the original text file
return;
end
fh = fopen(FileName); % if binary file does not exist load data ftom the original text file
fh_closer = onCleanup(@() fclose(fh)); % the file will be closed properly even in case of error
Data = fscanf(fh, repmat('%f ',1,NColumns), [NColumns,inf]);
Data = Data';
save(MatFileName,'Data'); % and make binary "chache" of the original data for faster subsequent reading
end
當原始數據文件改變時,不要忘記刪除MAT文件。
你試過'[a,b] = textread(filename,'%f%f')'? (假設你的數據是數字的)。 – dpwe