導入大數據文件,考慮使用textscan讀取文件,因為它能有效降低所需的內存(MATLAB中設定的有一個內存值,如果文件太大,超過這個值就要修改這個內存值,很麻煩)。
但是導入的是元胞數組,還要對其進行處理變成矩陣或者數組形式,個人不太喜歡。它還可以導入一個非矩形格式文件,用到的時候再看幫助文檔。
C = textscan(fid, 'format')
C = textscan(fid, 'format', N)
C = textscan(fid, 'format', 'param', value)
C = textscan(fid, 'format', N, 'param', value)
C = textscan(str, ...)
[C, position] = textscan(...)
textscan可以讀取帶格式的文本文件和字符串,使用前要先用fopen獲取文件指針,fid.所以先看看fopen的使用方法:
fileID = fopen(filename)
fileID = fopen(filename, permission)
fileID = fopen(filename, permission, machineformat)
fileID = fopen(filename, permission, machineformat, encoding)
[fileID, message] = fopen(filename, ...)
fIDs = fopen('all')
[filename, permission, machineformat, encoding] = fopen(fileID)
注釋:fileID即文件的標識符,filename:文件路徑,permission:‘r’,'w','a','r+','w+','a+','A','W',machineformat:指定讀寫位的順序,使用它主要用到不同的操作系統中,用到的時候再查,不詳解。encoding:為隨后的讀寫操作指定編碼方式,不詳解。
message:如果文件打開失敗會存儲基於系統的錯誤消息,否則為空。
打開后的文件要記得用fclose關閉,
fid = fopen('fgetl.m');
fclose(fid);
textscan注釋:textscan讀取出的數據是以元胞數組的形式呈現,一列為一個細胞,列數由format決定,譬如C = textscan(fid, '%s %s %f32 %d8 %u %f %f %s %f');會得到一個9列的元胞數組。
如果數據表中有缺失的數據,會以NaN填充。列數最好按照源文件的列數定義,假如我源文件中是9列,我在format中只提供了8個格式,那我的數據表就會將第9列的數字作為一個單獨行,(因為后面是換行符)
N:行數,照着format設定的列數循環N次,即是行數。
parameter,和value是參數表列,如Delimiter(分隔符之類的),EmptyValue,默認NaN,EndOfLine:默認根據文件決定是\n還是\r,等。具體可以查表。
textscan會根據MATLAB的規則在遇到溢出,截斷時使用NaN,inf,-inf