【问题标题】:Vectorizing the subtraction of multiple vectors from one individual vector向量化从一个单独的向量中减去多个向量
【发布时间】:2014-06-11 03:51:22
【问题描述】:

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

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

【问题讨论】:

    标签: arrays performance matlab vectorization bsxfun


    【解决方案1】:

    您需要使用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
    

    【讨论】:

    • @Bentoy13 完全同意。它是矢量化的最佳工具之一! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多