Lavorando in Matlab I ho 2 vettori di coordinate x con lunghezza diversa. Per esempio:Mappatura di 2 vettori - aiuto per vettorizzare
xm = [15 20 24 25 26 35 81 84 93];
xn = [14 22 26 51 55 59 70 75 89 96];
ho bisogno di mappare xm per xn, o in altre parole per trovare quale le coordinate nel xn sono più vicini a xm. Quindi se ho dei valori associati a quelle coordinate, posso usare questa mappa come indice e correlare questi valori.
Entrambi i vettori sono ordinati e non ci sono duplicati in ciascun vettore.
Ho scritto una semplice funzione con ciclo for:
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
Per l'esempio di cui sopra è rendimenti
xmap =
1 2 2 3 3 3 8 9 10
Funziona bene, ma richiede un po 'con lunghe vettori (oltre 100.000 punti) .
Qualche idea su come vettorializzare questo codice?
Sto usando la nuova sintassi ~ nell'ultima versione di Matlab per saltare una variabile non utilizzata. Se hai una versione precedente, sostituisci ~ con tmp. – yuk
Giusto per chiarire, vuoi per ogni xm [i] l'indice j tale che xm [i] è più vicino a xn [j]? –
Sì. Buon riassunto, grazie. – yuk