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);
到目前为止我只拥有一个值 - 绝对最接近的值。
答案 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