Trabajando en Matlab Tengo 2 vectores de coordenadas x con longitudes diferentes. Por ejemplo:Mapeo de 2 vectores - ayuda a vectorizar
xm = [15 20 24 25 26 35 81 84 93];
xn = [14 22 26 51 55 59 70 75 89 96];
necesito para mapear xm para x n, o, en otras palabras, para encontrar las coordenadas en x n estamos mucho más cerca xm. Entonces, si tengo valores asociados con esas coordenadas, puedo usar este mapa como índice y correlacionar esos valores.
Ambos vectores están ordenados y no hay duplicados en cada vector.
I escribió una función simple con for-loop:
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
Para el ejemplo anterior es retornos
xmap =
1 2 2 3 3 3 8 9 10
Funciona bien, pero toma un tiempo con vectores largos (más de 100.000 puntos) .
¿Alguna idea de cómo vectorizar este código?
Estoy usando la nueva ~ sintaxis en la última versión de Matlab para omitir una variable no utilizada. Si tiene una versión anterior, simplemente sustituya ~ con tmp. – yuk
Solo para aclarar, ¿quiere para cada xm [i] el índice j tal que xm [i] esté más cerca de xn [j]? –
Sí. Buen resumen, gracias. – yuk