如何在 Matlab 中对循环进行矢量化?
How to vectorize for loops in Matlab?
我有一个矩阵,其中每一行都是数据点的向量,我想使用分类器预测每一行的标签。我现在正在做的是在 for 循环中逐行读取矩阵的每一行,并在每个条目上 运行 分类器。这里有并行化的空间,因为每一行的结果都独立于其他行。 MATLAB 有什么函数可以加快速度吗?
假设您自己编写了分类器,这是可能的。您将传递完整的矩阵,而不是将一行传递给分类器。在分类器中,您将不得不更改进行预测的方式。假设您使用数学公式来计算结果,您将不得不使用逐元素运算符来更改它。使用逐元素运算符代替 for 循环的示例:
示例数据
a = [1,2;
3,4;
5,6]
使用 for 循环
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 循环,因为它效率更高。
我有一个矩阵,其中每一行都是数据点的向量,我想使用分类器预测每一行的标签。我现在正在做的是在 for 循环中逐行读取矩阵的每一行,并在每个条目上 运行 分类器。这里有并行化的空间,因为每一行的结果都独立于其他行。 MATLAB 有什么函数可以加快速度吗?
假设您自己编写了分类器,这是可能的。您将传递完整的矩阵,而不是将一行传递给分类器。在分类器中,您将不得不更改进行预测的方式。假设您使用数学公式来计算结果,您将不得不使用逐元素运算符来更改它。使用逐元素运算符代替 for 循环的示例:
示例数据
a = [1,2;
3,4;
5,6]
使用 for 循环
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 循环,因为它效率更高。