1

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

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

4

1 回答 1

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
于 2014-04-25T13:12:17.113 回答