我正在研究MATLAB中的一个软件,我相信在优化和效率方面,我已经达到了我的知识极限。这里是StackOverflow上人员的专业知识可能会有所帮助。
使用MATLAB的分析器,我发现最后一个低效的代码行是以下形式的乘法:
function [energy] = getEnergy(S,W)
energy = -(S*W*S');
end
S
是1
x N
行向量,W
是N
x N
矩阵(它不仅仅是对角矩阵)虽然),S'
是一个N
x 1
列向量,其乘法返回一个数字。
我知道这是一个原始操作,但我想知道是否有任何方法可以加快速度。
我尝试搜索Google等,但遗憾的是我不知道要搜索的关键字。如果这是重复,我道歉。
提前致谢。
答案 0 :(得分:0)
如果瓶颈源于您需要为许多不同的向量S
重复此计算,那么您可以执行以下向量化:
% s is k-by-N matrix of k row vectors
energy = sum( ( s * W ) .* s, 2 ); % note the .* in the middle!
答案 1 :(得分:0)
您的实施是正确的,也是最快的。
通过在主代码中执行它可以节省大约20-30%的计算时间,而无需调用该函数。
>> S = randn(1, 500);
>> W = randn(500);
>> tic; for k = 1 : 10000, e = -(S * W * S'); end; toc
Elapsed time is 0.321595 seconds.