代码之家  ›  专栏  ›  技术社区  ›  nullgeppetto

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

  •  1
  • nullgeppetto  · 技术社区  · 9 年前

    假设我们在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
    

    这样做有一个微不足道的方法;打开一个文件进行写入并使用double- 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足够大,这可能会非常慢。我正在寻找一种有效的方法(如果有的话),可以避免使用 对于 循环。至少有一个。

    1 回复  |  直到 9 年前
        1
  •  1
  •   horchler    9 年前

    利用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);
    

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