2016-01-25 3 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 из массива A и возьмите абсолютное значение, как и у вас, затем отсортируйте его и возьмите самые низкие цифры 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 
Смежные вопросы