2016-01-25 64 views
1
A = 
0.75 
0.6 
0.62 
0.51 
0.53 
0.48 

在這樣一個數組中,如何計算最接近給定數的x個值的索引?例如:查找數組中最近的一組數值到一個數組中

x = 0.5 %Given number 
y = 3; %Number of values closest to (x) to extract 

在這裏,我們希望提取三個最接近的值爲0.5 - 0.51,0.53和0.48。

[~,I] = min(abs(data-b)); 
c = data(I); 

是我到目前爲止,但這只是提取一個值 - 絕對最接近。

回答

5
A = [0.75 
0.6 
0.62 
0.51 
0.53 
0.48]; 

x = 0.5 %Given number 
y = 3; %Number of values closest to (x) to extract 

[~,c] = sort(abs(A-x)); 
yclosest=A(c(1:y)); 

這使用第二個輸出sort來索引原始數組A。首先,從數組中減去數字x,然後取絕對值,然後對其進行排序並採用最低的y數字,並使用這些數字來索引A

4

對絕對差異進行排序,並選擇最小化這種差異的三個值是最具規範的方法....事實上,這就是我的建議。

但是爲了完整起見,如果您可以使用工具箱,請考慮使用統計工具箱中的knnsearch並返回k=3最接近的點。 knnsearch的輸出爲您提供最近點的指數。要查找實際點,指數爲A後:

A = [0.75 
0.6 
0.62 
0.51 
0.53 
0.48]; 

x = 0.5; 
y = 3; 

IDX = knnsearch(A, x, 'K', y); 
out = A(IDX); 

我們得到:

>> out = A(IDX) 

out = 

    0.5100 
    0.4800 
    0.5300 
相關問題