2013-04-16 73 views
1

说我有2点矩阵在MATLAB的指标:查找数值最接近的值

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

B = [2 10 19] 

是否有一个功能,我可以使用,这样,您在B的每一个元素,我能找到的索引例如,在上面的例子中:2,10和19在A中数值上最接近1,9和18,而1,9,9和18的指数分别是1,4和8,所以该函数应该返回[1 4 8]。

我知道我可以使用循环来做到这一点,但matlab并不真的喜欢循环加我的矩阵太大,迭代通过所有值将是非常昂贵的时间。

+0

目前,我通过排序两个矩阵,然后在某种程度上寻找值降低时间成本,这样在最后最接近的发现价值的指标被保存并那么搜索B中下一个元素的最接近的值就是从这个保存的值开始,而不是从1开始。 – vsx06

+0

感谢您指向帖子的指针。这很有用:) – vsx06

+0

@ vsx06'knnsearch'是显而易见的答案。 –

回答

4

我将进行如下:

% 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))) 
+2

请不要添加'clc,全部清除,全部关闭'。我可能想要保留缓存所有执行的功能的性能和保持我的数字打开。 – Oleg