我在两个文件中有两个大矩阵,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
Run Code Online (Sandbox Code Playgroud)
但是,读取矩阵(前两行)需要很长时间,并且Matlab(在每个dlmread之后)继续打印这些矩阵.您知道如何禁用此打印并使流程更快吗?
要禁止打印,您只需在每行后面加一个分号:
A = dlmread('fileA');
B = dlmread('fileB');
dlmwrite('result', A * B');
Run Code Online (Sandbox Code Playgroud)
加速读取的一种方法是告诉Matlab您正在使用哪个分隔符,因此不需要推断它.例如,如果文件是制表符分隔符,则可以使用
A = dlmread('fileA','\t');
Run Code Online (Sandbox Code Playgroud)
或者如果它以逗号分隔,您可以使用:
A = dlmread('fileA',',');
Run Code Online (Sandbox Code Playgroud)
除此之外,您可以考虑使用不同的文件格式.文件在哪里生成?如果它们是由另一个Matlab进程生成的,那么您可以将它们保存为Matlab的二进制格式,使用load和访问它save:
A = [1 2; 3 4];
save('file.mat','A');
clear A;
load('file.mat','A');
Run Code Online (Sandbox Code Playgroud)
为了快速进行基准测试,我将以下矩阵写入两个文件:
>> A = [1 2 3; 4 5 6; 7 8 9];
>> dlmwrite('test.txt',A);
>> save('test.mat','A');
Run Code Online (Sandbox Code Playgroud)
然后我运行了两个基准测试:
>> 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.
Run Code Online (Sandbox Code Playgroud)
这里使用的版本在版本的load一半时间进入dlmread.您可以对适当大小的矩阵进行自己的基准测试,看看哪种方法最适合您.
| 归档时间: |
|
| 查看次数: |
138 次 |
| 最近记录: |