我正在尝试向量化,或者使以下代码更有效:
[Y,k] = min(abs(dxcp-X));
X = dxcp(k);
代码的目标是将值X与x(dxcp)的可接受值数组进行比较,并将X分配给数组dxcp中的最接近值。例如:
X等于9,dxcp数组为:[1,2,3,6,10,20]。第二行将X改为等于10.
我正在尝试更改我的脚本,以便X可以作为一个数字数组输入,并且想知道在这种情况下使上述代码工作的最有效方法是什么。我当然可以使用:
for i = 1:numel(X)
[Y,k] = min(abs(dxcp-X(i)));
X(i) = dxcp(k);
end
但我觉得必须有一种方法可以更有效地完成这项工作。干杯,nzbru。
答案 0 :(得分:3)
您需要使用bsxfun
将案例扩展为矢量案例。
<强>代码强>
dxcp = [1 2 3 6 10 20];
X = [2 5 9 18]
abs_diff_vals = abs(bsxfun(@minus,dxcp,X')); %%//'
[~,k] = min(abs_diff_vals,[],2);
X = dxcp(k)
<强>输出强>
X =
2 5 9 18
X =
2 6 10 20