雖然Divakar的答覆工作,如果你沒有在文本文件中的零的任何值,這可能不是一般這樣的情況。例如,如果你的文本數組是
1 2 3
4 0
5 6 0 7 8
然後Divakar的結果將是:
1 2 3 nan nan
4 nan nan nan nan
5 6 nan 7 8
而你真的想:
1 2 3 nan nan
4 0 nan nan nan
5 6 0 7 8
實現最簡單的方法是打開dlmread函數(只需在文本編輯器中輸入dlmread並按Ctrl + D將其打開)。請確保將此文件另存爲您使用其他名稱的目錄(即dlmread_nan.m)中的單獨文件。
再往代碼(在我的版本線126)的這一部分:
if isempty(delimiter)
result = textscan(fid,'',nrows,'headerlines',r,'headercolumns',c,...
'returnonerror',0,'emptyvalue',0, 'CollectOutput', true);
else
delimiter = sprintf(delimiter);
whitespace = setdiff(sprintf(' \b\t'),delimiter);
result = textscan(fid,'',nrows,...
'delimiter',delimiter,'whitespace',whitespace, ...
'headerlines',r,'headercolumns',c,...
'returnonerror',0,'emptyvalue',0,'CollectOutput', true);
end
,並在這兩種情況下更改「emptyvalue」後的價值爲NaN,而不是0保存文件。它應該是這樣的:
if isempty(delimiter)
result = textscan(fid,'',nrows,'headerlines',r,'headercolumns',c,...
'returnonerror',0,'emptyvalue',NaN, 'CollectOutput', true);
else
delimiter = sprintf(delimiter);
whitespace = setdiff(sprintf(' \b\t'),delimiter);
result = textscan(fid,'',nrows,...
'delimiter',delimiter,'whitespace',whitespace, ...
'headerlines',r,'headercolumns',c,...
'returnonerror',0,'emptyvalue',NaN,'CollectOutput', true);
end
爲了讓您的陣列,使用此:
result = dlmread_nan('text.txt', ' ');
%%//This will give you exactly what you're looking for.
這是一個有點繁瑣,但是從MATLAB的圖書館拷貝,這可能會是很多更強大,沒有錯誤比自己從頭開始編寫它。
可以我們'textread' – bla
是的,你應該看看這裏所示的例子靠近你需要的東西:http://stackoverflow.com/questions/14158165/read-block-of-data-into-matlab-array – beedot