将for循环转换为向量(向量化)

时间:2013-10-01 17:50:58

标签: matlab loops for-loop vectorization

对于那些超级专家,我想知道你是否看到一种快速的方法将以下“for”循环转换为更有效的单行向量计算。

%Define:
%A size (n,1)
%B size (n,m)
%C size (n,1)

B = [2 200; 3 300; 4 400];
C = [1;2;1];

for j=1:n
     A(j) = B( j, C(j) );
end

所以要明确的是,有没有其他方法来表达A,作为B和C的函数,而不必编写循环?

2 个答案:

答案 0 :(得分:2)

是的,有:

A = B(sub2ind([n,m], (1:n).', C));

答案 1 :(得分:0)

它取决于函数A,B和C,但这可能有效:

j = 1:n;
A = B(j, C(j));