【发布时间】:2015-09-04 20:07:59
【问题描述】:
我的代码中有 for 循环(如下所述),它需要一段时间才能运行。 CALC 是我定义的函数; Dis 一个矩阵; Y是一个矩阵; k 是一个向量。有没有办法可以对这段代码进行矢量化处理,从而取消 for 循环?任何贡献都将受到高度赞赏。
for column = 1:n
q(:,column) = CALC(D,Y(:,column), k(column));
end
CALC 函数概述如下:
function [x] = CALC(A, y, s)
[m, n] = size(A);
% y is an m x 1 vector
% s is an integer
r = y;
index_cols = [];
atoms = [];
for i = 1 : s
[max_r, lambda_t] = max(abs(r'*A));
index_cols = [index_cols, lambda_t];
atoms = [atoms, A(:,lambda_t)];
x_t = pinv(atoms)*y;
r = y - atoms*x_t;
end
x = zeros(n,1);
x(index_cols) = x_t;
end
【问题讨论】:
-
CALC 实际上是做什么的?这将有助于提供有关如何矢量化的想法。
-
除非我们知道
CALC做了什么,否则我们不能向量化这段代码。这就像你给我们一个黑匣子,我们不知道它实际上是如何工作的,而你告诉我们让这个黑匣子运行得更快。除非我们了解您在做什么,否则不可能知道如何让它更快。 -
感谢您的贡献@paisanco 我已更新问题以包含 CALC 函数
-
感谢您的贡献@rayryeng 我已更新问题以包含 CALC 函数
-
我看到了伪逆。使用它已经使您的代码不可矢量化。
标签: matlab for-loop vectorization