1

我正在使用 MATLAB 开发一个软件,我相信在优化和效率方面我已经达到了我的知识极限。在这里,StackOverflow 上的人员的专业知识可能会有所帮助。

使用 MATLAB 的分析器,我发现最后一行效率低下的代码是以下形式的乘法:

function [energy] = getEnergy(S,W)
  energy = -(S*W*S');
end

S是一个1xN行向量,W是一个NxN矩阵(虽然它不仅仅是一个对角矩阵),并且S'是一个Nx1列向量,其乘法返回一个数字。

我知道这是一个原始操作,但我想知道是否有任何方法可以加快速度。

我尝试搜索 Google 等,但不幸的是我不知道要搜索的正确关键字。如果这是重复的,我很抱歉。

提前致谢。

4

2 回答 2

0

如果瓶颈源于您需要对许多不同的向量重复此计算S,那么您可以执行以下向量化:

% s is k-by-N matrix of k row vectors
energy = sum( ( s * W ) .* s, 2 ); % note the .* in the middle!
于 2013-06-16T13:12:57.870 回答
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.
于 2013-06-16T13:45:24.807 回答