在Octave中将矩阵写入文本文件的最快方法是什么?

Ste*_*ven 12 matlab file matrix octave

我有一个大矩阵(2e6 x 3),我必须写入文本文件.

dlmwrite需要大约230秒来完成这项任务.

根据您的经验,将大矩阵写入文本文件的最快方法是什么?

ang*_*nor 15

以下内容适用于MATLAB,但我建议您在Octave中尝试.首先,如果可以 - 转置矩阵.以下是使用fprintfcsvwrite(基本上dlmwrite)的示例

A = rand(3, 1e6);
tic;
fid = fopen('data.txt', 'w+');
for i=1:size(A, 1)
    fprintf(fid, '%f ', A(i,:));
    fprintf(fid, '\n');
end
fclose(fid);
toc

tic;
csvwrite('data.txt', A);
toc;

Elapsed time is 1.311512 seconds.
Elapsed time is 2.487737 seconds.
Run Code Online (Sandbox Code Playgroud)

如果没有转置,确实需要很长时间.默认情况下,fprintf每次调用后刷新缓冲区.您可以尝试使用W而不是w打开文件,但这并没有太多改善这种情况.

  • 你可以避免使用显式循环并使用`fprintf(fid,'%f%f%f \n',A)`此外,fprintf将按列逐步回收应用于变量的格式.例如:`tic; fid = fopen('data.txt','w +'); fprintf(fid,'a =%fb =%fc =%f \n',A); fclose(fid); toc`经过的时间是2.019833秒.并在每条1e6线上给出三个数字和一个换行符. (2认同)

Ana*_*pta 7

你试过这个吗?与dlmwrite相比,我不确定它的速度.

a = [1 2;3 4];
save temp.txt a;
Run Code Online (Sandbox Code Playgroud)

  • 也许它应该以这种方式使用:tic; save temp.txt A -ASCII; TOC; (2认同)