矢量化从一个单独的矢量中减去多个矢量

时间:2014-04-25 12:19:49

标签: arrays performance matlab vectorization bsxfun

我正在尝试向量化,或者使以下代码更有效:

[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。

1 个答案:

答案 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