在Matlab中打印n*m矩阵

10

在MATLAB中,我通过以下方式打印非常大的矩阵:

fid = fopen('c:\\OUTPUT.txt','wt');
fprintf(fid,'%f\t',T');
fclose(fid);

但这样不对!我想要像这样打印:(它们之间有\t,每行末尾有\n
1   2   3
4   5   6
7   8   9
10  11  12

我搜索并发现如果是3*3那就没问题:

fprintf(fid,'%f %f %f\n',T');

但是在我的情况下,尺寸发生了改变...

你可以像这样链式连接 fprintf 命令:for ii=1:N; fprintf(fid,'%f',T(ii)); if(ii~=N) fprintf(fid,'\t') end end fprintf(fid,'\n'); 或者直接保存至一个 mat 文件中。 - macduff
3个回答

17

您可以使用非常简单的

fprintf([repmat('%f\t', 1, size(A, 2)) '\n'], A');

每行末尾都会有一个多余的制表符\t

>> A = magic(5)

A =

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

>> fprintf([repmat('%f\t', 1, size(A, 2)) '\n'], A')
17.000000   24.000000   1.000000    8.000000    15.000000   % oh, a tab
23.000000   5.000000    7.000000    14.000000   16.000000   % oh, a tab 
4.000000    6.000000    13.000000   20.000000   22.000000   % oh, a tab
10.000000   12.000000   19.000000   21.000000   3.000000    % oh, a tab
11.000000   18.000000   25.000000   2.000000    9.000000    % oh, a tab

要将输出打印到文件中,只需使用

fprintf(fid, [repmat('%f\t', 1, size(A, 2)) '\n'], A')

我应该把文本文件放在哪里?! - bunNyBug
@bunNyBug 使用 fprintf(fid, ...) - Lumen
@Lumen - 有没有办法消除最后一个空的换行符? - Alaa M.
这里有一个避免额外制表符的替代方案:fprintf(fid, ['%f' repmat('\t%f', 1, size(A, 2)-1) '\n'], A') - gnovice

4

您可能还想查看dlmwrite

您可以设置分隔符、精度等。

dlmwrite('myfile.txt', M, 'delimiter', '\t', 'precision', 6)

其中M是您的矩阵。


0

为了补充@Lumen已经给出的有用且被接受的答案

您可以使用strrep来消除多余的制表符,以查找换行符前面的制表符\t\n并将其替换为\n

因此,

fprintf([repmat('%f\t', 1, size(A, 2)) '\n'], A');

变成:

fprintf(strrep([repmat('%f\t', 1, size(A, 2)) '\n'],'\t\n','\n'), A');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接