www.gusucode.com > nnet 工具箱 matlab 源码程序 > nnet/nndistance/+dist/apply.m
function z = apply(w,p,param) %DIST.APPLY Apply weight to input % Copyright 2012-2015 The MathWorks, Inc. [S,R] = size(w); Q = size(p,2); if isa(w,'gpuArray') z = iDistApplyGPU(w,p,R,S,Q); else z = iDistApplyCPU(w,p,S,Q); end end function z = iDistApplyCPU(w,p,S,Q) z = zeros(S,Q); if (Q<S) pt = p'; for q=1:Q z(:,q) = sum(bsxfun(@minus,w,pt(q,:)).^2,2); end else wt = w'; for i=1:S z(i,:) = sum(bsxfun(@minus,wt(:,i),p).^2,1); end end z = sqrt(z); end function z = iDistApplyGPU(w,p,R,S,Q) p = reshape(p,1,R,Q); sd = arrayfun(@iDistApplyGPUHelper,w,p); z = sqrt(reshape(sum(sd,2),S,Q)); end function sd = iDistApplyGPUHelper(w,p) sd = (w-p) .^ 2; end