Find the index of numerically closest value
假设我在matlab中有2个矩阵:
1 2 3
| 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中下一个元素的最近值 值,而不是每次。
-
感谢您指向该帖子的指针。 这很有用:)
-
@ vsx06 knnsearch是显而易见的答案。
-
@Parag:从哪个版本的MATLAB开始可用knnsearch?
-
@fpe怎么检查? 我在那里使用R2011b及其它。
-
@Parag knnsearch在统计信息工具箱中
-
@Dan是的,我知道,但是如何检查引入了哪个版本的MATLAB?
-
@Parag我不知道,但我的意思是,它在工具箱中的事实解释了为什么fpe或其他人可能无法访问它。
我将进行如下操作:
1 2 3 4 5
| % 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))?