我需要帮助Matlab矢量化这段代码

时间:2015-04-14 20:41:39

标签: matlab vectorization

我是MatLAB的新手,我不知道矢量化的正确基础知识。 我试图对这个函数进行矢量化。

function  indc  =  PatchSearch(X, row, col, off, nv, S, I)

[N M]   =   size(I);
f2      =   size(X,2);

rmin    =   max( row-S, 1 );
rmax    =   min( row+S, N );
cmin    =   max( col-S, 1 );
cmax    =   min( col+S, M );

idx     =   I(rmin:rmax, cmin:cmax);
idx     =   idx(:);
B       =   X(idx, :);        
v       =   X(off, :);


dis     =   (B(:,1) - v(1)).^2;
for k = 2:f2
    dis   =  dis + (B(:,k) - v(k)).^2;
end
dis   =  dis./f2;
[val,ind]   =  sort(dis); 
indc        =  idx( ind(1:nv) );
%indc = idx(dis<250);

我需要一些专家的帮助来实现这个功能的矢量化 感谢

2 个答案:

答案 0 :(得分:0)

您可以替换代码的以下循环部分 -

dis     =   (B(:,1) - v(1)).^2;
for k = 2:f2
    dis   =  dis + (B(:,k) - v(k)).^2;
end

使用此bsxfun实施 -

dis = sum(bsxfun(@minus,B,v).^2,2);

此假设f2B中的列数,与v中的元素数相同,并以{{1}的方式查看代码}和B已初始化,似乎非常正确。

答案 1 :(得分:0)

使用repmatsum的一种可能解决方案:

用此代码替换循环及其上方的行。

dis=sum((B-repmat(v,size(B,1),1)).^2,2);