Работа в Matlab У меня есть 2 вектора координат x с разной длиной. Например:Картирование 2 вектора - help toizeize
xm = [15 20 24 25 26 35 81 84 93];
xn = [14 22 26 51 55 59 70 75 89 96];
Мне нужно отобразить хт хп, или, другими словами, чтобы выяснить, какие координаты в хп ближе к хт. Поэтому, если у меня есть значения, связанные с этими координатами, я могу использовать эту карту в качестве индекса и соотнести эти значения.
Оба вектора сортируются, и в каждом векторе нет дубликатов.
Я написал простую функцию с для цикла:
function xmap = vectors_map(xm,xn)
xmap = zeros(size(xm));
for k=1:numel(xm)
[~, ind] = min(abs(xm(k)-xn));
xmap(k) = ind(1);
end
Для приведенного выше примера это возвращает
xmap =
1 2 2 3 3 3 8 9 10
Он работает нормально, но занимает некоторое время, с длинными векторами (более 100 000 точек) ,
Какие-нибудь идеи, как векторизовать этот код?
Я использую новый синтаксис в последней версии Matlab для пропуска неиспользуемой переменной. Если у вас более ранняя версия, просто замените ~ на tmp. – yuk
Чтобы уточнить, вы хотите, чтобы для каждого xm [i] был указан индекс j такой, что xm [i] ближе всего к xn [j]? –
Да. Хорошее резюме, спасибо. – yuk