我有两个矩阵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个。
答案 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'
)