Matlab將.mat檔案儲存為.txt檔案

ColiYin發表於2017-08-18

  由於一開始沒寫mat2txt()的函式,手動轉換髮現工作量巨大,於是網上搜尋了關於儲存的方法,大家的方法各有不同,整理一下現總結如下:

1、使用save命令儲存

  命令如下:

// filename.txt 為要儲存的檔名,data 為工作區中的變數
save  filename.txt  data -ascii 

  先說這種方法的優點,就是簡單!簡單!當然,既然簡單肯定有侷限性,就是這種方法儲存出來的 .txt 是不會換行的,變數 data 中的資料全部置於文字檔案中,無法區分;若之前的變數 data 是一行資料,推薦這種方法, 若之前的變數 data 是n*m 的矩陣,則不推薦這種方法。另外,這種方法儲存的資料,會自動以科學計數法儲存,若原本資料是整數,看起來肯定不爽。

2、使用dlmwrite()函式儲存

  命令如下:

dlmwrite('filename.txt',data);

  需要說明一下引數的意義,filename.txt 為需要儲存的檔案的名稱,data 是需要儲存的工作區中的資料。預設情況下,轉換格式後的資料之間使用逗號隔開,我們可以通過引數更改,即使用關鍵字“delimiter”,下面是使用空格隔開的一個例子:

dlmwrite('filename.txt',data,'delimiter',' ');

  除此之外,還可以使用 precision 設定資料精度;使用 newline 設定行終止符,‘pc’表示使用回車換行符,‘unix’表示換行符。

  還是要說優缺點。這種方法依然是很簡便的,但是它依然不能實現矩陣的轉換,與使用 save 命令的儲存沒有太多不同。

3、使用自己編寫的函式 mat2txt() 儲存

  既然以上matlab自帶函式無法實現我們想要的結果,於是自己編寫一個函式實現該功能,程式碼如下:

//把矩陣 matrix 儲存成任意字尾的檔案
//轉換成 .txt 舉例:mat2txt( 'filename.txt', data );
//轉換成 .corr 舉例:mat2txt( 'filename.corr',data );

function back = mat2txt( file_Name, matrix ) 
fop = fopen( file_Name, 'wt' );
[M,N] = size(matrix);
for m = 1:M
    for n = 1:N
        fprintf( fop, ' %s', mat2str( matrix(m,n) ) );
    end
    fprintf(fop, '\n' );
end
back = fclose( fop ) ;

  該函式可以實現 .mat 到任意字尾格式檔案的轉換,前提是源資料為純資料檔案。

相關文章