从文件中读取矩阵时禁止打印

时间:2013-01-15 09:49:31

标签: matlab

我在两个文件中有两个大矩阵,A(21,000 x 80,000)和B(3,000 x 80,000)我想要繁殖:

C = A * B_transposed

目前我有以下脚本:

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

但是,读取矩阵(前两行)需要很长时间,并且Matlab(在每个dlmread之后)继续打印这些矩阵。您知道如何禁用此打印并加快处理速度吗?

1 个答案:

答案 0 :(得分:7)

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

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

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

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

或者如果它以逗号分隔,您可以使用:

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

除此之外,您可以考虑使用其他文件格式。文件在哪里生成?如果它们是由另一个Matlab进程生成的,那么您可以将它们保存为Matlab的二进制格式,可以使用loadsave进行访问:

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版本的一半时间。您可以对适当大小的矩阵进行自己的基准测试,看看哪种方法最适合您。