我正在使用matlab分析大型数据集。我希望能够在这个矩阵上运行fprintf命令行,它有大约22000列。所以,到目前为止我的想法是:
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 :(得分:5)
您可以使用此matlab文档中描述的其中一个选项。可能性是:
save -ascii
(谨防科学记数法)dlmwrite
fprintf
,格式定义为fmt = repmat('%d\t',1,8);
(8将被实际的列数替换)或者,您可以使用以下名为saveascii
的文件交换功能。
答案 1 :(得分: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');