|
|
|
|
| Zitat von nobody
[...] die von [...] R weg wollen | |
|
|
|
|
|
|
|
Warum klappt es im obigen Code nicht, zwei Schleifen "for row in reader:" auszuführen?
Ich habe zur Zeit die Anordnung Schleife, Anweisung, Schleife, Anweisung, Schleife. Anweisungen und die erste Schleife werden ausgeführt, die zweite nicht.
Muss ich irgendwie den Laufindex wieder resetten?
Spoken like a true virgin! - Damn straight!
|
|
|
|
|
|
|
? Eigentlich nicht, wenn du die nicht einander verschachtelst. Minimalbeispiel pl0x.
Also meinst du:
|
Code: |
for row in reader:
stuff(row)
for row in reader:
other_stuff(row) |
|
?
Das sollte gehen.
/e: Ganzen Post lesen, da ist ja Code auf der letzten Seite... ja, das ist ein Iterator, der nach einem Durchgang verbraucht wird.
| Zitat von Concrete_R
| Zitat von nobody
[...] die von [...] R weg wollen | |
| |
Gibt natürlich auch Masochisten, die das nicht wollen.
|
[Dieser Beitrag wurde 2 mal editiert; zum letzten Mal von nobody am 16.11.2017 23:04]
|
|
|
|
|
|
Genau das funktioniert nicht.
|
Code: |
csvfile = open('NZMASP17_Abstracts_20171111.csv')
reader = csv.DictReader(csvfile) # Uses first row for naming rows
for row in reader:
print('you are awesome')
for row in reader:
print('fuck off')
|
|
Klappt nicht.
|
Code: |
csvfile = open('NZMASP17_Abstracts_20171111.csv')
reader = csv.DictReader(csvfile) # Uses first row for naming rows
for row in reader:
print('you are awesome')
csvfile = open('NZMASP17_Abstracts_20171111.csv')
reader = csv.DictReader(csvfile) # Uses first row for naming rows
for row in reader:
print('fuck off')
|
|
Klappt.
Ey. Da wird man doch bekloppt.
All the cherubims say, "You gotta!" - trust the man with the stigmata!
|
|
|
|
|
|
|
Das Problem ist wohl, dass DictReader ein Iterator ist. Wenn der exhausted ist, kann man nicht noch einmal darüber iterieren.
// edit
Ok, du erstellst einen neuen DictReader, allerdings liest der auch vom gleichen file-Objekt, welches auch ein Iterator ist, der nach einmal lesen exhausted ist.
// edit ende
Du müsstest die Zeilen zuerst einmal in eine Liste packen, über die kannst du dann mehrmals iterieren.
|
Code: |
rows = list(reader)
for row in rows:
stuff(row)
for row in rows:
other_stuff(row) |
|
|
[Dieser Beitrag wurde 4 mal editiert; zum letzten Mal von red am 16.11.2017 22:03]
|
|
|
|
|
|
Danke. Was ein Abfuck. Wer kommt auf so ein unnützes Ding?!
Ich sage mal so, das ist nichttrivialerweise offensichtlich...
|
|
|
|
|
|
|
Naja, pauschal alles cachen geht auch nicht, könnte ja sein, dass dein Input größer ist als dein Arbeitsspeicher.
|
|
|
|
|
|
|
Ich weiß nicht, wo ich das sonst posten soll:
Ich spiele mich aktuell etwas mit WebGL. Könnte auch LWJGL oder sonst was sein, aber für meine Testzwecke geht das aktuell einfach am schnellsten und einfachsten. Im Endeffekt will ich folgendes erreichen: Ein 3D Modell wird dargestellt. Ich will über x Sensoren das Modell bewegen. Beispiel: Sensor auf den Armen, Brust, Beinen, Kopf, ..., dadurch wird mein Modell lebensnah am Bildschirm bewegt. Soviel zur Idee.
Jetzt habe ich folgendes "Problem", wobei ich dadurch keine direkten Aussagen im Internet finden kann. Vielleicht suche ich nach den falschen Begriffen.
Ich bewege z.B. den Unterarm des Modelles. Je nach Lage, muss sich damit auch die Position des Oberarmes und der Schulter ändern. Sprich, die Bewegung von Bone A wirkt sich auf Bone B und dieser auf Bone C [...] aus. Weiters kann der Unterarm nur in bestimmte Richtungen zu bestimmten Graden rotieren. Wo ist nun der Platz, um diese Beschränkungen und Relationen zu beachten?
1. Im 3D Modell während des Riggings. Wäre nice, da ich dann in meinem Movement-Programm nur noch einzelne Bones beachten muss, nie das ganze Skelett. In Blender konnte ich da jetzt nix direkt finden, aber das Programm ist auch echt Clusterfuck.
2. Während ich das Quaternion oder eine andere Bewegungsvariable des Modelles ändere, muss ich gleichzeitig alle Children des aktuellen Knochens manuell durchchecken. Irgendwie uncool.
Über WebGL habe ich aktuell ein Modell, welches ich einzeln an den Knochen bewegen kann. Toll! Allerdings kann ich z.B. den Unterarm in alle beliebigen Richtungen rotieren lassen, kreuz und quer. Es bewegen sich zwar die Children des Unterarmes wie Hand und Finger mit, aber das bringt mir auch nicht viel.
Mir geht's halt erstmal um das Verständnis eines solchen Systemes.
|
|
|
|
|
|
|
| Zitat von red
Naja, pauschal alles cachen geht auch nicht, könnte ja sein, dass dein Input größer ist als dein Arbeitsspeicher.
| |
Was ist ein Iterator, dass er nicht in den RAM muss...?
|
|
|
|
|
|
|
Du hast einen Cursor, der auf eine Stelle in der Datei zeigt. Wenn du die nächste Zeile vom Iterator haben willst, liest er einfach die nächste Zeile aus der Datei und schiebt den Cursor weiter. Also hast du immer nur eine Zeile im RAM.
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von red am 16.11.2017 21:57]
|
|
|
|
|
|
Ah.
Verständlich - aber doch nie im Leben der Hauptanwendungsfall eines Nutzers! Wenn du LHC-Daten in eine csv packst, wirst du bestimmt nicht mit einem Python-Paket an die Datei gehen (und eh die Größe erahnen), und die csv, die Anmeldeformulare generieren, werden den Arbeitsspeicher nicht taxieren.
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Wraith of Seth am 16.11.2017 22:06]
|
|
|
|
|
|
| Zitat von Wraith of Seth
Ah.
Verständlich - aber doch nie im Leben der Hauptanwendungsfall eines Nutzers!
| |
Doch. Absolut
|
|
|
|
|
|
|
Leute hantieren mit möglicherweise gigantischen CSV ohne auf Speicher zu gucken? Du gute Güte!
|
|
|
|
|
|
|
| Zitat von Wraith of Seth
Leute hantieren mit möglicherweise gigantischen CSV ohne auf Speicher zu gucken? Du gute Güte!
| |
Ehh?
|
|
|
|
|
|
|
Dieses Konstrukt gibt es, WEIL man sich Gedanken über den Speicherverbrauch macht.
|
|
|
|
|
|
|
| Zitat von Wraith of Seth
Leute hantieren mit möglicherweise gigantischen CSV ohne auf Speicher zu gucken? Du gute Güte!
| |
Lies nochmal.
| Zitat von red
Also hast du immer nur eine Zeile im RAM.
| |
|
|
|
|
|
|
|
Nein, ihr versteht mich falsch.
Für mich ist eine CSV erstmal eine Tabelle, die man nutzt, weil man kein Office-Paket zur Verfügung hat, d.h. gehe irgendwie davon aus, dass es sinnvoll ist, mehrmals auf die Zeilen zurückzugreifen. Wenn ich jetzt schon mit der Anzahl der Zeilen (denn das macht ja letztlich der Iterator) Probleme im RAM habe, ... ...äh...??
Aber: Ich habe noch nie etwas geschrieben, was mehr als 100 Zeilen Code (oder so in der Größenordnung) hatte, von daher habe ich wahrscheinlich einfach keine Ahnung, und bin nur frustriert, dass es nicht für meinen Pippifax-Anwendungsfall optimiert ist.
Wovon man nicht sprechen kann, darüber muss man schweigen.
|
[Dieser Beitrag wurde 2 mal editiert; zum letzten Mal von Wraith of Seth am 17.11.2017 1:58]
|
|
|
|
|
|
Iteratoren sind eine Erfindung der armen Bevölkerung, die kein Geld für genug Arbeitsspeicher hat.
|
|
|
|
|
|
|
| Zitat von derSenner
Ich weiß nicht, wo ich das sonst posten soll:
Ich spiele mich aktuell etwas mit WebGL. Könnte auch LWJGL oder sonst was sein, aber für meine Testzwecke geht das aktuell einfach am schnellsten und einfachsten. Im Endeffekt will ich folgendes erreichen: Ein 3D Modell wird dargestellt. Ich will über x Sensoren das Modell bewegen. Beispiel: Sensor auf den Armen, Brust, Beinen, Kopf, ..., dadurch wird mein Modell lebensnah am Bildschirm bewegt. Soviel zur Idee.
Jetzt habe ich folgendes "Problem", wobei ich dadurch keine direkten Aussagen im Internet finden kann. Vielleicht suche ich nach den falschen Begriffen.
Ich bewege z.B. den Unterarm des Modelles. Je nach Lage, muss sich damit auch die Position des Oberarmes und der Schulter ändern. Sprich, die Bewegung von Bone A wirkt sich auf Bone B und dieser auf Bone C [...] aus. Weiters kann der Unterarm nur in bestimmte Richtungen zu bestimmten Graden rotieren. Wo ist nun der Platz, um diese Beschränkungen und Relationen zu beachten?
1. Im 3D Modell während des Riggings. Wäre nice, da ich dann in meinem Movement-Programm nur noch einzelne Bones beachten muss, nie das ganze Skelett. In Blender konnte ich da jetzt nix direkt finden, aber das Programm ist auch echt Clusterfuck.
2. Während ich das Quaternion oder eine andere Bewegungsvariable des Modelles ändere, muss ich gleichzeitig alle Children des aktuellen Knochens manuell durchchecken. Irgendwie uncool.
Über WebGL habe ich aktuell ein Modell, welches ich einzeln an den Knochen bewegen kann. Toll! Allerdings kann ich z.B. den Unterarm in alle beliebigen Richtungen rotieren lassen, kreuz und quer. Es bewegen sich zwar die Children des Unterarmes wie Hand und Finger mit, aber das bringt mir auch nicht viel.
Mir geht's halt erstmal um das Verständnis eines solchen Systemes.
| |
Nur so der Vollständigkeit halber:
"Inverse Kinematics" scheint das Zauberwort zu sein, nach dem ich gesucht habe.
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von derSenner am 17.11.2017 8:56]
|
|
|
|
|
|
| Zitat von Oli
Iteratoren sind eine Erfindung der armen Bevölkerung, die kein Geld für genug Arbeitsspeicher hat.
| |
mmap ist nur dorniger ram!
WoS, csv.DictReader ist halt eine Abstraktion von einem File Reader - damit du nicht jede Zeile oder gar Zeichen aus einer csv selber lesen musst, entscheiden musst wann ein nächstes Feld kommt etcpp gibt es diese Klasse, die für dich jeweils eine Zeile liest und dir die CSV Felder zurück gibt.
Es ist das Prinzip von Python da lazy zu sein und deswegen gibt dir die zuweisung rows=.... nicht direkt alle rows, sondern nur ein Iterator, der wenn du auf seine Elemente zugreifen willst (z.B. per Schleife, per next(rows),...), dir dann erst durch das File spaziert.
|
|
|
|
|
|
|
| Zitat von Wraith of Seth
Nein, ihr versteht mich falsch.
Für mich ist eine CSV erstmal eine Tabelle, die man nutzt, weil man kein Office-Paket zur Verfügung hat, d.h. gehe irgendwie davon aus, dass es sinnvoll ist, mehrmals auf die Zeilen zurückzugreifen. Wenn ich jetzt schon mit der Anzahl der Zeilen (denn das macht ja letztlich der Iterator) Probleme im RAM habe, ... ...äh...??
Aber: Ich habe noch nie etwas geschrieben, was mehr als 100 Zeilen Code (oder so in der Größenordnung) hatte, von daher habe ich wahrscheinlich einfach keine Ahnung, und bin nur frustriert, dass es nicht für meinen Pippifax-Anwendungsfall optimiert ist.
Wovon man nicht sprechen kann, darüber muss man schweigen.
| |
Der default Wert ist halt verbrauche so wenig Speicher wie möglich. Python weiß nicht wie groß die Datei ist und ob sie in den RAM passt. Wenn der Anwender weiß, dass die passt kann er ja list(reader) aufrufen. Der default Wert ist jedoch sehr sinnvoll da es viele Datensätze gibt die größer sind als dein RAM (nicht nur vom Cern) und du zugleich insbesondere bei Csv Daten oft nur mit einer Zeile gleichzeitig arbeitest.
|
|
|
|
|
|
|
Meh, Scheißwelt. Das hat alles für mich optimiert zu sein.
Immerhin läuft das Programm. Ich kann dynamisch die Abstract-Liste erstellen und die Programmtabelle. Nur die Slots sind hardgecoded, und die Reihenfolge durch die CSV vorgegeben. Könnte schlimmer sein. Auch wenn der Code wahrscheinlichen jeden echten Coder/Programmierer in Schockstarre fallen lässt.
...wie zu erwarten, ist der eigentliche Horror, die Namensschilder in LaTeX ans Laufen zu bekommen. Siehe LaTeX-Thread...
...kein Mensch kann sie wissen, kein Jäger erschießen.
|
|
|
|
|
|
|
| Zitat von Wraith of Seth
Meh, Scheißwelt. Das hat alles für mich optimiert zu sein.
| |
Es ist bereits für dich optimiert. Es ist an dir zu verstehen, warum!
|
|
|
|
|
|
|
| Zitat von Wraith of Seth
Wenn du LHC-Daten in eine csv packst, | |
Fun fact: die verwenden HDF5 (teilweise), genau wie die Leute vom XFEL, weil auch kleinere Anlagen mit hoher Repetitionsrate ruckzuck in den Wharrrgarbbl-Modus gehen.
|
|
|
|
|
|
|
Ich nutze HDF5/NetCDF inzwischen für jeden Scheiß.
Bombe ist das.
|
|
|
|
|
|
|
Wir haben ein eigenes Format geschrieben, was im Prinzip HDF5 repliziert (insbesondere geblockte und komprimierte Represäntation von Volumen), aber einfach das filesystem benutzt. Damit haben wir easy parallele writes.
|
|
|
|
|
|
|
Du meinst das hier? https://www.tiledb.io/
/e: Ich bin gerade dabei zu testen, wie meine STEM image Simulation skaliert. Bis 2048 Procs ist es bisher fast embarrassingly parallel, i.e., perfekter speedup. Belege auf dem Darmstädtischen Cluster momentan 128 komplette Knoten. \o/
|
[Dieser Beitrag wurde 2 mal editiert; zum letzten Mal von Oli am 17.11.2017 15:25]
|
|
|
|
|
|
Ne, in-house Java library (mittlerweile auch mit C++/Python reader).
|
|
|
|
|
|
|
Ist HDF eine neumodische IMS DB ohne IMS TM?
|
|
|
|
|
|
|
HDF ist einfach nur ein hierarchisches Binärdatenformat. Man kann Gruppen anlegen, und Gruppen können einfache Attribute und vieldimensionale Daten beherbergen. Dazu kann man beeinflussen, wie die Daten gechunked werden (also in welcher Reihenfolge sie abgelegt werden), es kann automatisch komprimiert werden und so weiter.
Ich nutze das, um eine einzelne Datei zu erstellen, in der ich strukturiert alle Ergebnisse meienr Rechnungen ablegen kann, inklusive lauter Meta Daten. Ist deutlich angenehmer und platzsparender als ein Verzeichnis mit zig Dateien zu haben.
/e: MATLABs .mat Format ist auch HDF5.
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Oli am 17.11.2017 16:13]
|
|
|
|
|
Thema: pOT-lnformatik, Mathematik, Physik XXI ( X-Ray-Edition ) |