Ich bin auf der Suche nach einer Generatorfunktion, die Punkte entlang einer Linie gibt, mit einem Mindestabstand von k
. Das ist einfach genug, und kann mit numpy erfolgen wie folgt:Back-und-Forth Linespace Generator
points = np.linspace(start, end, k)
Allerdings mag ich die Punkte als eine Art „zunehmende Auflösung“ zu erzeugen, das so auf einer Linie von 0 bis 1, die Generator ergäbe:
1/2, 1/4, 3/4, 1/8, 3/8, 5/8, ...
Auch dies leicht genug ist, rekursiv zu tun (nur die Endpunkte akzeptieren und auf jeder Hälfte selbst nennen), aber ich würde einen Generator wie für die gleiche Sache, ohne erzielen zu füllen ein Array mit allem von Anfang an und ohne doppelte Punkte.
Was wäre der beste Weg, dies zu tun?
Hat 5/8 auf 3/8 folgen? Es gibt einen bekannten Algorithmus, um eine Sequenz mit 1/2, 1/4, 3/4, 1/8, 5/8, 3/8, 7/8, 1/16 usw. zu erzeugen. Dies wird als gut angesehen Weg zur Pseudo-Monte-Carlo-Integration. –
@ WillemVanOnsem, ja, ich glaube, das ist etwas, das "Lost Cow Algorithm" genannt wird? Die Generierung der Punkte 3/8, 4/8, 5/8 wäre einfacher, hätte aber redundante Punkte. Dies könnte leicht gelöst werden, indem man gegen eine Menge prüft, aber wenn es eine Möglichkeit gibt, keine redundanten Punkte an erster Stelle zu erzeugen - vorausgesetzt, dass dies schneller ist als die Verwendung einer Menge -, wäre das am besten. – Teknophilia
nein, der obige Satz enthält keine Duplikate. Nur wenn sich der Nenner ändert, wird die * Reihenfolge * der Werte nicht erhöht. Aber es erzeugt die gleichen Punkte ohne Duplikate. –