Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 向量化从单个向量中减去多个向量_Arrays_Performance_Matlab_Vectorization_Bsxfun - Fatal编程技术网

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

@本托伊十分同意。这是矢量化的最佳工具之一!:)