Frage

Nehmen wir an, wir haben einen Vektor wie

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

Ich möchte den maximalen Abstand zwischen den Elementen von berechnen x auf idiomatische Weise. Es wäre einfach, über alle möglichen Kombinationen von einfach zu iterieren x'S Elemente, aber ich habe das Gefühl, dass es eine Möglichkeit geben könnte, dies mit den integrierten Funktionen von Matlab auf verrückte, aber idiomatische Weise zu tun.

War es hilfreich?

Lösung

Wie wäre es mit

max_dist = max(x) - min(x)

?

Andere Tipps

Meinst du den Unterschied zwischen den größten und kleinsten Elementen in deinem Vektor? Wenn Sie dies tun, funktioniert so etwas:

max(x) - min(x)

Wenn Sie dies nicht tun, habe ich die Frage missverstanden.

Dies ist eine Interpoint -Entfernungsberechnung, obwohl Sie einfach sind, da Sie in einer Dimension arbeiten. Wirklich, dieser Punkt, der in einer Dimension maximal fällt, ist immer einer von zwei möglichen Punkten. Alles, was Sie tun müssen, ist, den Mindestwert und den Höchstwert aus der Liste zu erreichen und zu sehen, welche weiter von dem fraglichen Punkt entfernt sind. Unter der Annahme, dass die Zahlen in x echte Zahlen sind, wird dies funktionieren:

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

Als Alternative habe ich vor einiger Zeit ein allgemeines Interpoint -Entfernungsberechnungstool für die Dateiaustausch aufgestellt (IPDM). Es ist intelligent genug für Sonderfall einfache Probleme wie das 1-d-weiteste Punktproblem. Dieser Anruf würde es für Sie tun:

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

Natürlich wird es nicht so effizient sein wie der einfache Code, den ich oben geschrieben habe, da es sich um ein vollständig allgemeines Werkzeug handelt.

Ähh ... würde gerne einen Matlab in meinen Händen haben und es ist noch früh am Morgen, aber was ist mit so etwas wie:

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

Ich weiß nicht, ob Sie dies suchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top