Pregunta

Supongamos que tenemos un vector como

x = -1:0.05:1;
ids = randperm(length(x));
x = x(ids(1:20));

Me gustaría calcular la distancia máxima entre los elementos de x de alguna manera idiomática. Sería fácil iterar sobre todas las combinaciones posibles de xLos elementos, pero siento que podría haber una manera de hacerlo con las funciones incorporadas de Matlab de una manera loca pero idiomática.

¿Fue útil?

Solución

Qué pasa

max_dist = max(x) - min(x)

?

Otros consejos

¿Te refieres a la diferencia entre los elementos más grandes y más pequeños de tu vector? Si lo haces, entonces algo como esto funcionará:

max(x) - min(x)

Si no lo haces, entonces he entendido mal la pregunta.

Este es un cálculo de distancia interpoint, aunque simple, ya que está trabajando en una dimensión. Realmente ese punto que cae a una distancia máxima en una dimensión siempre es uno de los dos puntos posibles. Entonces, todo lo que necesita hacer es obtener el valor mínimo y el valor máximo de la lista, y ver cuál está más lejos del punto en cuestión. Suponiendo que los números en x son números reales, esto funcionará:

xmin = min(x);
xmax = max(x);
maxdistance = max(x - xmin,xmax - x);

Como alternativa, hace algún tiempo puse una herramienta de cálculo de distancia de interpunto general en el intercambio de archivos (IPDM). Es lo suficientemente inteligente para problemas especiales de casos simples como el problema de punto más lejano 1-D. Esta llamada lo haría por ti:

D = ipdm(x,'subset','farthest','result','struct');

Por supuesto, no será tan eficiente como el código simple que escribí anteriormente, ya que es una herramienta completamente general.

Uhh ... me encantaría tener un matlab en mis manos y todavía es temprano en la mañana, pero qué hay de algo así:

max_dist = max(x(2:end) - x(1:end-1));

No sé si esto es lo que estás buscando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top