Question

Supposons que nous avons un vecteur comme

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

Je voudrais calculer la distance maximale entre les éléments de x d'une manière idiomatique. Il serait facile de simplement itérer sur toutes les combinaisons possibles de xLes éléments sont mais j'ai l'impression qu'il pourrait y avoir un moyen de le faire avec les fonctions intégrées de Matlab d'une manière folle mais idiomatique.

Était-ce utile?

La solution

Qu'en est-il de

max_dist = max(x) - min(x)

?

Autres conseils

Voulez-vous dire la différence entre les plus grands et les plus petits éléments de votre vecteur? Si vous le faites, alors quelque chose comme ça fonctionnera:

max(x) - min(x)

Si vous ne le faites pas, j'ai mal compris la question.

Il s'agit d'un calcul à distance d'interpoint, bien que simple, car vous travaillez dans une dimension. Vraiment, ce point qui tombe à une distance maximale dans une dimension est toujours l'un des deux points possibles. Il vous suffit donc de saisir la valeur minimale et la valeur maximale de la liste, et voyez qui est plus éloignée du point en question. En supposant donc que les nombres en x sont des nombres réels, cela fonctionnera:

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

Comme alternative, il y a quelque temps, j'ai mis un outil de calcul de distance à interpoint général sur l'échange de fichiers (IPDM). Il est assez intelligent pour des problèmes simples de cas spéciaux comme le problème le plus éloigné du 1-D. Cet appel le ferait pour vous:

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

Bien sûr, il ne sera pas aussi efficace que le code simple que j'ai écrit ci-dessus, car il s'agit d'un outil entièrement général.

Euhh ... j'adorerais avoir un matlab à mes mains et c'est encore tôt le matin, mais qu'en est-il de quelque chose comme:

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

Je ne sais pas si c'est ce que vous recherchez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top