我需要这个代码的Matlab矢量化帮助
我是MatLAB新手,我不知道矢量化的基本知识。。 我正在尝试将此函数矢量化我需要这个代码的Matlab矢量化帮助,matlab,vectorization,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( co
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);
我需要一些专家的帮助来引导这个函数
谢谢您可以替换代码的以下循环部分-
dis = (B(:,1) - v(1)).^2;
for k = 2:f2
dis = dis + (B(:,k) - v(k)).^2;
end
通过这种实现-
dis = sum(bsxfun(@minus,B,v).^2,2);
这里的假设是f2是B中的列数,这与v中的元素数相同,从代码初始化B和v的方式来看,这似乎非常正确。使用repmat和sum的一种可能解决方案: 用此代码替换循环及其上方的行
dis=sum((B-repmat(v,size(B,1),1)).^2,2);
矩阵维度存在问题。如果您的意思是希望输出dis作为列向量而不是行向量,那么问题就解决了。@AbeeraGohar查看您最近发布的关于Stackoverflow的另一个问题,它看起来不像是循环,甚至这个函数也可能是瓶颈。关于减少函数调用,如果您只与我们共享一个函数,我们无法减少对它的函数调用数量,除非您也与我们共享调用函数。我需要在gpu上实现这段代码。。我直接尝试并在gpu上实现,但它花费了很长时间,因为循环太多了。然后我发现矢量化后在gpu上的实现将减少运行此代码的时间。。现在em坚持矢量化。。我想我会从头开始/从最独立的函数开始,然后转到最复杂的函数。。请指导我如何移动我正在发布调用它的函数以及其中调用的所有函数。。即使你给了我正确的方向,我也会很感激你能告诉我你的电子邮件地址吗?@AbeeraGohar让我们把它保留在Stackoverflow上。谢谢你的理解。