【问题标题】:Find the index of numerically closest value [duplicate]查找数值最接近值的索引[重复]
【发布时间】:2013-04-16 20:57:23
【问题描述】:

假设我在 matlab 中有 2 个矩阵:

A = [1 4 6 9 11 13 15 18 21]

B = [2 10 19]

有没有我可以使用的函数,以便对于 B 中的每个元素,我能够找到与 A 中该元素最接近的值的索引。例如,在上面的示例中:2,10 和 19 是数值上最接近 A 中的 1,9 和 18,并且 1、9 和 18 的索引是 1,4 和 8,所以函数应该返回 [1 4 8]。

我知道我可以使用循环来执行此操作,但 matlab 不太喜欢循环,而且我的矩阵太大,迭代所有值的时间会非常昂贵。

【问题讨论】:

  • 目前,我通过对两个矩阵进行排序然后以某种方式查找值来降低时间成本,以便保存 A 中最后一个最接近找到的值的索引,然后搜索最接近的值B 中的下一个元素从这个保存的值开始,而不是 1。每次。
  • 感谢指向帖子的指针。这很有用:)
  • @vsx06 knnsearch 是显而易见的答案。
  • @Parag: knnsearch 从哪个 MATLAB 版本开始可用?
  • @fpe 如何检查?我使用 R2011b 和它。

标签: matlab function find closest


【解决方案1】:

我会按照以下方式进行:

% clc,clear all,close all
A = [1 4 6 9 11 13 15 18 21];
B = [2 10 19];
C = abs(bsxfun(@minus,A',B));
[~,idx] = min(C(:,1:size(C,2)))

【讨论】:

  • 请不要加clc,clear all,close all。我可能想在缓存中保留所有已执行的函数以提高性能并保持我的数字打开。
  • 为什么不用更短的[~, idx] = min(abs(A'-B))
猜你喜欢
  • 2016-07-19
  • 1970-01-01
  • 1970-01-01
  • 2017-03-15
  • 2013-03-29
  • 1970-01-01
  • 2021-10-15
  • 2015-07-26
  • 2018-07-31
相关资源
最近更新 更多