Как найти ближайший индекс к указанному индексу в Matlab

У меня есть два вектора в MATLAB, A и B. B содержит некоторые индексы (от 1 до конца). У меня есть случайный индекс, R (в диапазоне векторных индексов). Я хочу написать функцию (или оператор), чтобы выбрать[z], где z-самое ближайшее число (i.e индекс) К R, который не включен в B.

пример:

A = [2 3 6 1 9 7 4 5 8]
B = [3 4 5 6 7 8]
R = 5

функция должна возвращать 3, потому что самый близкий индекс равен 2, потому что 5-2

спасибо

3 ответов


улучшение ответа Якоба, вот правильное решение:

[result, z] = min(abs(R - setxor(B, 1:numel(A))))

и в вашем случае, что дает z = 2 и result = A(2) = 3.


Если я правильно понимаю, вы можете сначала исключить, чтобы найти индексы не в B, т. е. excl = A(setxor(B,1:length(A))). Тогда легко получить мин, как это excl(min(abs(R-excl))).


обратите внимание, что функции setdiff и setxor сортируют результат.

tmpSet = R - setdiff(1:numel(A),B);
[~,z] = min(abs(tmpSet));
z = tmpSet(z);
Result = A(R-z);

тот же пример в вопрос:

A = [2 3 6 1 9 7 4 5 8]
B = [3 4 5 6 7 8]
R = 5

tmpSet = 5 - {1 2 9} = {4 3 -4}
z = 2
z = 3
Result = A(5-3) = A(2) = 3 

Спасибо за ваши идеи.