2

我在两个文件中有两个大矩阵,我想要相乘的 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 之后)继续打印这些矩阵。您知道如何禁用此打印并使该过程更快吗?

4

1 回答 1

7

要禁止打印,您只需在每行后放置一个分号:

A = dlmread('fileA');
B = dlmread('fileB');
dlmwrite('result', A * B');

加快读取速度的一种方法是告诉 Matlab 你正在使用什么分隔符,这样就不需要推断它。例如,如果文件是制表符分隔的,您可以使用

A = dlmread('fileA','\t');

或者如果它是逗号分隔的,你可以使用:

A = dlmread('fileA',',');

除此之外,您可以考虑使用不同的文件格式。文件在哪里生成?如果它们是由另一个 Matlab 进程生成的,那么您可以将它们保存为 Matlab 的二进制格式,使用loadand访问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。您可以对适当大小的矩阵进行自己的基准测试,看看什么最适合您。

于 2013-01-15T09:52:24.697 回答