【问题标题】:Efficiently write matrix to file in custom format in Matlab在 Matlab 中以自定义格式有效地将矩阵写入文件
【发布时间】:2015-12-24 21:16:42
【问题描述】:

假设我们在 Matlab 中有一个 N×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 循环。至少其中之一。

【问题讨论】:

    标签: performance matlab matrix file-writing


    【解决方案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 矩阵非常大。

    【讨论】:

    • 非常感谢@horchler!这正是我一直在寻找的!它确实加快了整个过程。无论如何,这是fprintf的一个好功能要知道!
    猜你喜欢
    • 1970-01-01
    • 2013-08-26
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多