2016-01-25 62 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 
相关问题