如果在循环内部进行检查,则在Matlab中对for循环进行矢量化

时间:2016-08-16 05:33:27

标签: arrays matlab for-loop vectorization

这是一个Matlab代码:

new=[];
for i=1:size(p,1)
    if (alpha*p(i,1)+beta*p(i,2)+gamma*p(i,3)-sigma)>0
    new=[new;p(i,:)];
    end
end

此处p是一个大型数组,如300000x3。通过从new数组中删除一些3元组来获取p数组。为此,if检查已完成。但这需要很多时间。

我希望对代码进行矢量化,例如获取一个二进制数组,其中1表示保留的点数,0表示删除的点数。然后使用这些标志,我们可以更快地构造new数组。我对吗?有人可以提供矢量化或加速上述代码的代码吗?

1 个答案:

答案 0 :(得分:0)

这样的事情应该有效

selectRows = (alpha*p(:,1)+beta*p(:,2)+gamma*p(:,3)-sigma)>0;
new = p(selectRows, :);