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 xElementi, ma mi sento come se ci fosse un modo per farlo con le funzioni integrate di Matlab in un modo folle ma idiomatico.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top