Hallo,
Ich habe eine Frage zu dem Modul Numpy..
Ich habe dort ein Cell-Array welches ich erstellt habe. In diesem sind Zahlen in bestimmter Sortierung abgelegt.
Nun möchte ich eine Tabelle dazu nehmen (zwei Spalten, viele Zeilen, eine Zeile bildet ein Wertepaar ) und die erste Spalte, Zeile für Zeile mit den Cell-Arrays vergleichen. Passt ein Wert überein, möchte ich den dazugehörigen zweiten Wert aus der Tabelle genau an die Stelle im Cell Array setzen..
Hat vielleicht jemand eine Idee, wie man dies umsetzen könnte? Ggf. gibt es schon eine Funktion, welche dinge sucht und ersetzt.
Danke!
NumpyArray Vergleichen/Erstzen
-
- User
- Beiträge: 512
- Registriert: Mittwoch 13. November 2019, 08:38
Ich bin mir nicht sicher, ob ich die Aufgabe richtig verstanden habe. Ich vermute mal, dass es sich durch Slicing lösen lässt:
Ergänzung: Numpy bietet durch Indexierung und Slicing unglaublich viele und beliebig komplizierte Möglichkeiten. Das ist am Anfang nicht leicht zu durchschauen. Als Tipp kann ich dir geben mal ein paar Erklärungen dazu durchzublättern. Z. B. https://www.pythoninformer.com/python-l ... and-slice/. Zu wissen wie der `axis`-Parameter funktioniert ist auch hilfreich: https://www.sharpsightlabs.com/blog/num ... explained/.
Und bevor du auf die Idee kommst - grundsätzlich gilt: Es ist fast immer falsch über Numpy-Arrays zu iterieren. In der Regel gibt es eine Funktion oder andere Möglichkeiten das Problem performant zu lösen.
Code: Alles auswählen
import numpy as np
tabelle = np.array([[1, 20], [5, 60], [3, 90], [4, 20], [0, 10]])
print("Tabelle:\n", tabelle)
daten = np.array([1, 2, 3, 4, 5])
print("Daten vorher:\n", daten)
daten[tabelle[:, 0] == daten] = tabelle[tabelle[:, 0] == daten, 1]
print("Daten nachher:\n", daten)
Und bevor du auf die Idee kommst - grundsätzlich gilt: Es ist fast immer falsch über Numpy-Arrays zu iterieren. In der Regel gibt es eine Funktion oder andere Möglichkeiten das Problem performant zu lösen.

Danke für deine schnelle Hilfe..
Ich weiß leider nicht genau, ob sich damit mein Problem performant ösen lässt, ich versuche vielleicht nochmal etwas detaillierter auf mein Problem einzugehen
Ich nehme ein bestimmtes Jahr z.B 2019. Dieses Jahr laufe ich Tag für Tag durch und erzeuge dabei ein numpy array, sortiert nach Tagart (Frühling, Sommer.. sowie Werktag oder Wochenende..), als Ergebnis habe ich also ein mehrdimensionales Array.
Nun habe eine eine Datenbank von 2019 mit Tabellen. Jede Tabelle hat hat zwei Spalten, einmal das genaue Datum und dazugehörig in der anderen Spalte einen Wert.
Ich möchte im Prinzip die Tabelle genauso sortieren wie das numpy array vorher, dabei aber den Sortiervorgang in irgendeiner Form speichern, da ich ihn nicht für alle Tabellen (einige 100e) erneut durchlaufen lassen will.
Mein Gedanke war, jetzt zu vergleichen ob das Datum in der Tabelle (Datenbank) in dem numpy array gefunden werden kann..
Allerdings müsste ich diesen Vorgang ja wieder für alle Tabellen durchführen, wodurch es wieder zu langen Laufzeiten kommt.
Hoffe das war so verständlich und freue mich auf eine Antwort
Ich weiß leider nicht genau, ob sich damit mein Problem performant ösen lässt, ich versuche vielleicht nochmal etwas detaillierter auf mein Problem einzugehen

Ich nehme ein bestimmtes Jahr z.B 2019. Dieses Jahr laufe ich Tag für Tag durch und erzeuge dabei ein numpy array, sortiert nach Tagart (Frühling, Sommer.. sowie Werktag oder Wochenende..), als Ergebnis habe ich also ein mehrdimensionales Array.
Nun habe eine eine Datenbank von 2019 mit Tabellen. Jede Tabelle hat hat zwei Spalten, einmal das genaue Datum und dazugehörig in der anderen Spalte einen Wert.
Ich möchte im Prinzip die Tabelle genauso sortieren wie das numpy array vorher, dabei aber den Sortiervorgang in irgendeiner Form speichern, da ich ihn nicht für alle Tabellen (einige 100e) erneut durchlaufen lassen will.
Mein Gedanke war, jetzt zu vergleichen ob das Datum in der Tabelle (Datenbank) in dem numpy array gefunden werden kann..
Allerdings müsste ich diesen Vorgang ja wieder für alle Tabellen durchführen, wodurch es wieder zu langen Laufzeiten kommt.
Hoffe das war so verständlich und freue mich auf eine Antwort

Nein, aus der Erklärung werde ich nicht schlau. Wie sehen die Daten konkret aus, und vor allem, was willst du damit weiter machen? Wenn hunderte Tabellen gleich sortiert sind, dann hänge sie doch einfach nebeneinander. Wörterbücher sind effizient beim zuordnen eines Schlüssels. Ein Datum hat auch schon eine natürliche Ordnung: Tage seit einem bestimmten Datum, z.B. dem 1.1.1970. Wenn du also eine Tabelle mit allen Tagen hast und eine, wo Tage fehlen oder ungeordnet sind, dann ist das Datum schon der Index von der einen in die andere Tabelle.
-
- User
- Beiträge: 512
- Registriert: Mittwoch 13. November 2019, 08:38
Ich verstehe die Datenstruktur auch noch nicht ganz. Handelt es sich um eine echte Datenbank (Access, SQLite, mySQL, Postgres etc.) oder verwendest du nur den Begriff für eine Ansammlung von Daten in einer anderen Form? Ich glaube für eine gute Lösung muss man bereits bei der Erzeugung/dem Einlesen der Datenstruktur ansetzen. Kannst du einen Beispieldatensatz posten und aufzeigen wo die Daten wie herkommen? Warum hast du für 2019 mehrere Tabellen mit zwei Spalten?