Arrays 向量化从单个向量中减去多个向量
我正在尝试矢量化,或使以下代码更高效:Arrays 向量化从单个向量中减去多个向量,arrays,performance,matlab,vectorization,bsxfun,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] = mi
[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。您需要使用将案例扩展为向量案例
代码
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
@本托伊十分同意。这是矢量化的最佳工具之一!:)