在 Matlab 中以自定义格式高效地将矩阵写入文件
Efficiently write matrix to file in custom format in Matlab
假设我们在 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
循环的有效方法(如果有的话)。至少其中之一。
利用 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
矩阵非常大。
假设我们在 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
循环的有效方法(如果有的话)。至少其中之一。
利用 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
矩阵非常大。