查找数组中给定值的最接近的值集

时间:2016-01-25 19:34:29

标签: matlab

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);

到目前为止我只拥有一个值 - 绝对最接近的值。

2 个答案:

答案 0 :(得分: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中减去数字A并获取绝对值,然后排序,然后取最低y数字并使用它们来索引{{1 }}

答案 1 :(得分: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