Seite 2 von 2
Re: ArraySPALTEN durchsuchen
Verfasst: Dienstag 28. Oktober 2014, 10:10
von lena_92
@BlackJack:
Die gegebenen Daten sind ein Ausschnitt aus einem orginal.txt file. Die Nummern sind Knotennummern und sind aufsteigend sortiert und fangen bei 200001 and und hören bei 276846 auf. Die drei weiteren Werte in einer Reihe sind den Nummer zugeordnet und beschreiben x, y, z Koordinaten.
Diese orginal.txt file ist die Grundbasis der Daten und ich brauche nur bestimmte.
knoten_start = 200323
knoten_end = 200507
und alle die in 23 Schritten zwischen beiden Knoten liegen. Da ich aber nur die Knotennummern betrachten möchte, würde ich gerne nur in der ersten Spalte nach diesen Nummern suchen.
Schlussendlich will ich die Knoten mit ihren Koordinantenin eine extra Datei schreiben, sodass ich nur die für mich relevanten Daten habe und damit weiter arbeiten kann.
Ist bei einer so großen großen Datei ein Filtern oder Suchen schneller und eleganter?
Ich hoffe das macht deutlich was ich umsetzten möchte.
Grüße
Lena
Re: ArraySPALTEN durchsuchen
Verfasst: Dienstag 28. Oktober 2014, 10:38
von BlackJack
@lena_92: Wie schon gesagt sollte man bei Numpy darauf achten das man die Datentypen auch ausnutzt und nicht ”langsame” Python-Schleifen schreibt. Wenn ich das Problem richtig verstanden habe und keinen Fehler bei der Umsetzung, dann kann man ohne selbst eine Schleife zu schreiben einen Index erstellen (ungetestet):
Code: Alles auswählen
start_node = 200323
end_node = 200507
step_size = 23
node_ids = data[:, 0]
index = (
(start_node <= node_ids)
& (node_ids <= end_node)
& ((node_ids - start_node) % step_size == 0)
)
result = data[index]
Re: ArraySPALTEN durchsuchen
Verfasst: Dienstag 28. Oktober 2014, 11:13
von MagBen
lena_92 hat geschrieben:Die Nummern sind Knotennummern und sind aufsteigend sortiert und fangen bei 200001 and und hören bei 276846 auf
Sind die Nummern ohne Lücken? Wenn ja dann brauchst Du nämlich gar nicht suchen, sondern Du kannst dann den Array-Index einfach direkt ausrechnen.
Wenn Sie Lücken haben, dann würde ich Dir numpy.searchsorted empfehlen und nicht die Suche mit == und argwhere
http://docs.scipy.org/doc/numpy/referen ... archsorted
Re: ArraySPALTEN durchsuchen
Verfasst: Dienstag 28. Oktober 2014, 11:17
von lena_92
@ BlackJack: Ich merken, dass ich noch gar nichts weiß... Danke für eure Hilfe.
Dein Script funktioniert soweit.
Ich kann auch die richtigen Ergebnisse per print darstellen.
Wenn ich nun aber per
Code: Alles auswählen
outfile = open('Zwischenablage.txt','w')
outfile.write(result)
bekomme ich in der Datei nur Mist...
ein Ausschnitt:
Code: Alles auswählen
<nul><nul><nul><nul><nul><nul><nul><nul><can>t<bs>A<nul><nul>
Liegt das am coding?
Ich benutze:
oder liegt das an der Array Darstellung? Je mehr ich lerne, desto mehr denke ich, dass ich NICHTS verstehe... :K :K
Grüße
Lena
Re: ArraySPALTEN durchsuchen
Verfasst: Dienstag 28. Oktober 2014, 11:23
von MagBen
numpy.loadtxt kennst Du ja schon und numpy.savetxt ist die Funktion um Arrays in einer Textdatei zu speichern
http://docs.scipy.org/doc/numpy/referen ... py.savetxt
Mit dem Parameter fmt kannst Du dann die Ausgabe auch richtig hübsch hinbekommen.
Re: ArraySPALTEN durchsuchen
Verfasst: Dienstag 28. Oktober 2014, 11:29
von BlackJack
@lena_92: Wenn Du ein Array-Objekt direkt in einer Datei schreibst wird der Speicher in dem die Binärdaten stehen 1:1 in die Datei geschrieben und keine für Menschen lesbare Textdarstellung der Zahlen.
Der Kodierungskommentar am Anfang einer Quelltextdatei bezieht sich nur auf den Quelltext selber und wird vom Compiler benutzt um den Quelltext zu dekodieren. Zur Laufzeit des Moduls hat das keine Auswirkungen. Und die dort angegebene Kodierung muss mit der tatsächlich im Quelltext verwendeten Kodierung übereinstimmen.
Re: ArraySPALTEN durchsuchen
Verfasst: Dienstag 28. Oktober 2014, 11:51
von lena_92
@ MagBen
Danke für den Hinweis. Das hatte ich heute morgen schon einmal zwischen den Fingern und habe es nicht ans Laufen bekommen. Nun klappt es SUPER!
@ BlackJack
Danke für die Information. So langsam füllt sich mein Notizbuch.
Lena