Как найти ближайший индекс к указанному индексу в 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
Спасибо за ваши идеи.