2013-04-16 74 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