Calcolo della distanza massima tra elementi del vettore in MATLAB
-
20-09-2019 - |
Domanda
Supponiamo che abbiamo un vettore come
x = -1:0.05:1;
ids = randperm(length(x));
x = x(ids(1:20));
Vorrei calcolare la distanza massima tra gli elementi di x
In qualche modo idiomatico. Sarebbe facile iterare semplicemente su tutte le possibili combinazioni di x
Elementi, ma mi sento come se ci fosse un modo per farlo con le funzioni integrate di Matlab in un modo folle ma idiomatico.
Soluzione
Che dire
max_dist = max(x) - min(x)
?
Altri suggerimenti
Intendi la differenza tra gli elementi più grandi e più piccoli del tuo vettore? Se lo fai, allora qualcosa del genere funzionerà:
max(x) - min(x)
Se non lo fai, allora ho frainteso la domanda.
Questo è un calcolo della distanza interpoint, sebbene semplice, dal momento che stai lavorando in una dimensione. In realtà quel punto che cade alla distanza massima in una dimensione è sempre uno dei due possibili punti. Quindi tutto ciò che devi fare è ottenere il valore minimo e il valore massimo dall'elenco e vedere che è più lontano dal punto in questione. Quindi supponendo che i numeri in x siano numeri reali, questo funzionerà:
xmin = min(x);
xmax = max(x);
maxdistance = max(x - xmin,xmax - x);
In alternativa, qualche tempo fa ho messo uno strumento di calcolo della distanza General Interpoint sullo scambio di file (IPDM). È abbastanza intelligente da casi speciali semplici problemi come il problema più lontano. Questa chiamata lo farebbe per te:
D = ipdm(x,'subset','farthest','result','struct');
Naturalmente, non sarà così efficiente come il semplice codice che ho scritto sopra, poiché è uno strumento completamente generale.
Uhh ... mi piacerebbe avere un matlab per mano ed è ancora la mattina presto, ma che ne dici di qualcosa di simile:
max_dist = max(x(2:end) - x(1:end-1));
Non so se questo è quello che stai cercando.