2015-06-12 38 views
3

我有兩個矩陣A和B如下面給出:如何fprintf列標題在MATLAB中?

A = [1 
    2 
    3 
    4 
    5] 

B = [10 11 12 13 
    15 16 17 18 
    17 12 15 13 
    20 21 22 17 
    40 41 32 33] 

和我想將其輸出到在下面給出與列標題的形式的文本文件,如下所示:

希望的文本輸出

A B B B B 
1 10 11 12 13 
2 15 16 17 18 
3 17 12 15 13 
4 20 21 22 17 
5 40 41 32 33 

重現代碼

A = [1; 2; 3; 4; 5]; 
B = [10, 11, 12, 13; 
    15, 16, 17, 18; 
    17, 12, 15, 13; 
    20, 21, 22, 17; 
    40, 41, 32, 33;]; 

ALL = [A B]; 

ALL_cell = mat2cell(ALL, ones(size(ALL,1),1), size(ALL,2)); 

fID = fopen('output.dat','w'); 
f = @(x) fprintf(fID,'%s\n',sprintf('%f\t',x)); 
cellfun(f,ALL_cell); 
fclose(fID); 

如何在MATLAB中插入如上所示的列標題?有時,在B中的列可能會超過100,作爲一個例子,我已經給只有4

+0

因此,通過列標題,您只需要變量的名稱(即, 'B')在每一列重複?只是'fprintf(fID,'%s \ n',sprintf('%s \ t',['A',repmat('B',size(1,size(B,2)))])''? – Dan

+1

你有至少MATLAB R2013b嗎?使用'table'函數及其他方法將被證明是非常有用的。讓我知道如果你這樣做,我會寫一個答案。 – rayryeng

+0

@rayryeng我使用R2012b。 –

回答

0

在我的工具腳本的私人收藏,我有一個功能,「漂亮打印」矩陣:

function pprint(fid, M, cols) 

fprintf(fid, '%s\t', cols{:}); 
fprintf(fid, '\n'); 
for irow=1:size(M, 1) 
    fprintf(fid, '% .3f\t', M(irow,:)); 
    fprintf(fid, '\n'); 
end 

你可以使用這樣的:

>> headers = [repmat({'A'}, 1, size(A, 2)), repmat({'B'}, 1, size(B, 2))] 

headers = 

    'A' 'B' 'B' 'B' 'B' 

>> fid = 1; % print to stdout 
>> pprint(fid, [A, B], headers) 
A  B  B  B  B 
1.000 10.000 11.000 12.000 13.000 
2.000 15.000 16.000 17.000 18.000 
3.000 17.000 12.000 15.000 13.000 
4.000 20.000 21.000 22.000 17.000 
5.000 40.000 41.000 32.000 33.000 

注意,標題和列僅排隊很好,如果列標籤也不會太大,則可能是增加額外的標籤來打,或者用空格代替標籤(即使用'%10s'代替'%s\t''%10.3f'而不是'% .3f\t'