在Matlab中以自定义格式有效地将矩阵写入文件

时间:2015-12-24 21:16:42

标签: performance matlab matrix file-writing

假设我们在Matlab中有一个N-by-d矩阵。让它成为

A = rand(N,d);

另外,让D为字符串的单元格数组,例如

D = {'a1', 'a2', ..., 'aN'};

我想创建一个文本文件,其第i行的格式为

D{i} 1:A(i,1) 2:1:A(i,2) ... N:A(i,N)\n

有一种无关紧要的方法可以做到这一点;打开一个文件进行写入并使用双for循环写入每一行,如下所示:

fid = fopen( 'test.txt', 'w' );
for i=1:size(A,1)
   fprintf( fid, '%s', D{i} );
   for j=1:size(A,2)
      fprintf( fid, ' %d:%g', j, A(i,j) );
   end
   fprintf( fid, '\n' );
end
fclose(fid);
但是,如果N和d足够大,这可能会非常慢。我正在寻找的是一种有效的方法(如果有的话)可以避免使用那些for循环。至少其中一个。

1 个答案:

答案 0 :(得分:1)

利用Matlab的fprintf迭代数组的方式,内部for循环可以替换为:

fprintf(fid, ' %d:%g', [1:size(A,2);A(i,:)]);

因此:

fid = fopen('test.txt', 'w');
z = 1:size(A,2);
for i=1:size(A,1)
   fprintf(fid, '%s', D{i});
   fprintf(fid, ' %d:%g', [z;A(i,:)]);
   fprintf(fid, '\n');
end
fclose(fid);

您需要使用更多内存来摆脱外部for循环,这可能不是一个好主意,因为您的A矩阵非常大