我在两个文件中有两个大矩阵,我想要相乘的 A (21,000 x 80,000) 和 B(3,000 x 80,000):
C = A*B_转置
目前我有以下脚本:
A = dlmread('fileA')
B = dlmread('fileB')
C = A*(B')
dlmwrite('result', C)
exit
然而,读取矩阵(前两行)需要很长时间,Matlab(在每个 dlmread 之后)继续打印这些矩阵。您知道如何禁用此打印并使该过程更快吗?
我在两个文件中有两个大矩阵,我想要相乘的 A (21,000 x 80,000) 和 B(3,000 x 80,000):
C = A*B_转置
目前我有以下脚本:
A = dlmread('fileA')
B = dlmread('fileB')
C = A*(B')
dlmwrite('result', C)
exit
然而,读取矩阵(前两行)需要很长时间,Matlab(在每个 dlmread 之后)继续打印这些矩阵。您知道如何禁用此打印并使该过程更快吗?
要禁止打印,您只需在每行后放置一个分号:
A = dlmread('fileA');
B = dlmread('fileB');
dlmwrite('result', A * B');
加快读取速度的一种方法是告诉 Matlab 你正在使用什么分隔符,这样就不需要推断它。例如,如果文件是制表符分隔的,您可以使用
A = dlmread('fileA','\t');
或者如果它是逗号分隔的,你可以使用:
A = dlmread('fileA',',');
除此之外,您可以考虑使用不同的文件格式。文件在哪里生成?如果它们是由另一个 Matlab 进程生成的,那么您可以将它们保存为 Matlab 的二进制格式,使用load
and访问save
:
A = [1 2; 3 4];
save('file.mat','A');
clear A;
load('file.mat','A');
为了快速进行基准测试,我将以下矩阵写入两个文件:
>> A = [1 2 3; 4 5 6; 7 8 9];
>> dlmwrite('test.txt',A);
>> save('test.mat','A');
然后我运行了两个基准测试:
>> tic; for i=1:1000; dlmread('test.txt',','); end; toc
Elapsed time is 0.506136 seconds.
>> tic; for i=1:1000; load('test.mat','A'); end; toc
Elapsed time is 0.260381 seconds.
这里使用的版本load
是该版本的一半时间dlmread
。您可以对适当大小的矩阵进行自己的基准测试,看看什么最适合您。