如何在MATLAB中fprintf列标题?

时间:2015-06-12 13:55:50

标签: matlab

我有两个矩阵A和B,如下所示:

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个。

1 个答案:

答案 0 :(得分: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'代替{ {1}}和'%s\t'代替'%10.3f'