如何在Matlab中对for循环进行矢量化?

时间:2015-02-07 14:19:44

标签: matlab for-loop vectorization

我有一个矩阵,其中每一行都是数据点的向量,我想使用分类器预测每行的标签。我现在正在做的是在for循环中逐个读取矩阵的每一行,并在每个条目上运行分类器。这里有并行化的空间,因为每行的结果独立于其他行。 MATLAB有什么功能可以加快速度吗?

1 个答案:

答案 0 :(得分:1)

假设您自己编写了分类器,这是可能的。您可以传递完整的矩阵,而不是将一行传递给分类器。在分类器中,您必须更改预测的方式。假设您使用数学公式计算结果,则必须使用逐元素运算符对其进行更改。使用逐元素运算符而不是for循环的示例:

示例数据

a = [1,2;
     3,4;
     5,6]

使用for-loop

p1= zeros(size(a,1),1);
for i=1:size(a,1)
    p1(i) = a(i,1)*2 + a(i,2)^2;
end

使用矢量化

p2 = a(:,1).*2 + a(:,2).^2

元素运算符:

http://nl.mathworks.com/help/matlab/ref/times.html?searchHighlight=element-wise

http://nl.mathworks.com/help/matlab/ref/power.html?searchHighlight=element-wise

强烈建议使用矢量化而不是for循环,因为它更有效。