Werte fest miteinander verbinden

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
redbluegreen
User
Beiträge: 3
Registriert: Samstag 3. Juli 2021, 10:43

Hallo liebe Community,

ich habe bisher x-y Koordinaten ein zweidimensionales Array speichern lassen, in die erste Reihe die x Werte und in die zweite Reihe y Werte:
[[0, 1, 5]
[12, 13, 11]].

In diesem Array sind die Reihenwerte mit dem selben Indizes wie beispielsweise (0, 12) oder (5, 11) zusammenhängend und fest, und können nicht verändert werden.

Jetzt habe ich weitere Koordinaten (4, 0) und (6, 10) bekommen, die ich in mein Array nach der Größe des X- Wertes sortiert einspeichern lassen möchte. Am Ende soll mein Array dann so aussehen:
[[0, 1, 4, 5, 6]
[12, 13, 0, 11, 10]]

Gibt es eine Funktion, wo man die zusammengehörige X-Y Werte miteinander verbindet, sodass man nur die X-Werte sortieren muss und die Y-Werte dann automatisch an die richtige Stelle hinzugefügt werden? Oder kommt man um eine Schleife nicht herum?

Vielen Dank schonmal!
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Hast Du jetzt ein numpy-Array oder eigentlich eine Liste?
Bei Listen ist es besser, wenn Du die Listen transponierst.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1012
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Angenommen, es wird kein Numpy verwendet:

Code: Alles auswählen

from operator import itemgetter
from itertools import chain


d1 = [
    [0, 1, 5],
    [12, 13, 11],
]

d2 = [
    [0, 1, 4, 5, 6],
    [12, 13, 0, 11, 10],
]


# einzeln transponieren und dann verketten
# chain mit list konsumieren
# dann konsumiert chain die beiden zip-objekte
chained_t = list(chain(zip(*d1), zip(*d2)))

# sortieren, erst mit element 0, dann 1 usw..
sorted_x_t = sorted(chained_t)

# nach zweitem Element sortieren, also Y
# Zugriff auf chained_t weiterhin möglich, da es als Liste vorliegt
# würde man die list-Funktion auslassen, kann das chain-object nur einmal mit sorted konsumiert werden
# und dann ist es aufgebraucht
sorted_y_t = sorted(chained_t, key=itemgetter(1))

# sortierte Daten wieder transponieren, um zur vorherigen Darstellung zu kommen
sorted_x = list(zip(*sorted_x_t))
sorted_y = list(zip(*sorted_y_t))

print(sorted_x)
print(sorted_y)
Vorlage zum Transponieren mit regulären Listen:

Code: Alles auswählen

daten = [(1, 2, 3), (10, 20, 30)]
transponiert = list(zip(*daten))

# transponiert = list(zip((1, 2, 3), (10, 20, 30)))
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
redbluegreen
User
Beiträge: 3
Registriert: Samstag 3. Juli 2021, 10:43

vielen dank
Antworten