2013-08-28 10 views
3

我正在使用matlab分析大型數據集。我希望能夠在該矩陣的fprintf命令行上運行一些東西,該列有大約22000列。所以,這是我到目前爲止的想法:在Matlab中,如何在任意大的矩陣上執行fprintf命令

j=22; 
for i = 1:j; 
    fname = fopen(strcat('chr', num2str(i), '.out'), 'r'); 
    A = fscanf(fname, '%d', [1000,inf]); 
    FIDW = fopen(strcat('chrproc', num2str(i), '.out'), 'w+'); 
    fprintf(FIDW, '%d\t%d\t%d\t%d\t%d\t%d\t\n', B); 
end 

有22個文件這個大小,將通過1-4行轉換爲矩陣。然而,棘手的部分(至少對我來說)是fprintf要求你提供FORMAT。由於這些文件太大,因此沒有真正的方法可以輸入%d \ t。

也許fgetl命令更好?但fgetl不會打印到文件中,更重要的是,fgetl會返回一個字符串,這對我來說效果不佳。真的,像fscanf命令會很好,除了讀取而不是打印...

非常感謝您的幫助和建議。

+0

你想打印矩陣的數據由製表符和換行符分隔嗎? –

+0

如果這只是一個設計,我會把它放在一個循環中。它需要快速嗎? – PeterM

回答

5

您可以使用此matlab文檔中描述的選項之一。這種可能性是:

  • save -ascii(提防科學計數法)
  • dlmwrite
  • fprintf你mentionned,在具有格式定義爲fmt = repmat('%d\t',1,8);
  • (8由列的實際號碼代替)

或者,您可以使用以下文件交換功能,稱爲saveascii

0

Marsei的回答是正確的。然而,在MATLAB編碼器,我不得不採取不同的方法(經常MATLAB作品也):

function printmatrix(matrix) 
    matrix = matrix';%transpose 
    [rows, cols] = size(matrix); 
    format=['%-10g ' 0]; 
    for i=1:cols 
     for j=1:rows 
      fprintf(format,matrix(j,i));%Flipped because of matlab 
     end 
     fprintf('\n'); 
    end 
    fprintf('Size of matrix: %g x %g\n', cols, rows);%Backwards because we invert it. 
end 

參見: https://stackoverflow.com/questions/38601352/how-to-print-a-matrix-in-matlab-coder

這也可以(但不是在MATLAB編碼):

m=magic(5); 
[rows cols] = size(m); 
x = repmat('%4.0f\t',1,(cols-1)); 
fprintf([x,'%4.0f\n'],m');