|
|
|
|
Hm, bist du sicher dass HDF5 überhaupt die relevanten Index-Operationen kann? Könnte mir vorstellen dass in dem Moment wo du fancy indexing benutzt ohnehin alle Daten geladen werden (wenn du Glück hast in Batches) - aber das ist nur eine Vermutung.
Kannst du asynchron (in der Cloud!) die HDF5-Daten in das richtige Format umwandeln und dann "normales" Indexing verwenden? Vielleicht das einfachste...
e/ Und einen kriegst du noch: Wenn du nur Bedenken wegen IO hast aber genug RAM, dann klappt's so:
|
Code: |
In [13]: shape = (2, 3, 4); arr = np.random.uniform(size=shape).reshape([-1])
In [14]: arr.reshape(shape)[1, :2, 2:3]
Out[14]:
array([[0.63263227],
[0.15985692]])
In [15]: np.arange(np.prod(shape)).reshape(shape)[1, :2, 2:3]
Out[15]:
array([[14],
[18]])
In [16]: np.arange(np.prod(shape)).reshape(shape)[1, :2, 2:3].reshape([-1])
Out[16]: array([14, 18])
In [17]: arr[np.arange(np.prod(shape)).reshape(shape)[1, :2, 2:3].reshape([-1])]
Out[17]: array([0.63263227, 0.15985692])
In [18]: indexed_shape = np.arange(np.prod(shape)).reshape(shape)[1, :2, 2:3].shape
In [19]: arr[np.arange(np.prod(shape)).reshape(shape)[1, :2, 2:3].reshape([-1])].reshape(indexed_shape)
Out[19]:
array([[0.63263227],
[0.15985692]])
|
|
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von B0rG* am 02.04.2024 10:29]
|
|
|
|
|
|
Danke... Ich versuche morgen mal zu raffen, was du da getippt hast.
|
|
|
|
|
|
|
Ich glaube ich verstehe ungefähr, worauf du hinaus willst. Ich glaube aber, das ist bei mir nicht praktikabel.
Also
1. Die Daten liegen auf langsamen NAS shares (cloud, lel)
2. Es sind ca. 10GB pro Dataset, also wäre es schon nett, da etwas zu sparen.
3. Es sind frequenzaufgelöste, sphärische Daten, also 0 < phi < 180, -180 < theta < 180, frequenz.
4. Es ist real und imaginärteil von komplexen Zahlen interleaved.
Also haben wir bei, sagen wir mal, 180 phi Positionen, 360 theta, 200 Energien, 2 complex 25920000 Zahlen.
Im HDF5 file liegt das als 1x25920000 Matrix vor. Danke Hersteller der Software! Hierbei ist die Reihenfolge der Indices frequenz, theta, phi, complex. Also für eine Frequenz brauche ich einen Block aus dem File. Für ein theta bei allen Frequenzen brauche ich 200 Blöcke, usw.
Zu allem Überfluss rechnen wir in einem anderen Koordinatensystem, nämlich geht phi von 0 bis 2pi, theta nur 180°. Also schaufele ich die Daten auch nochmal hin und her.
Ich glaube, es gibt keine elegante "automatische" Lösung, sondern ich schreibe einfach eine Accessfunktion, die halt manuell schaut, welche Blöcke aus dem HDF5 file gelesen werden müssen.
h5py/HDF5 kann fancy indexing, aber nur mit python slices: https://stackoverflow.com/a/21790576
Deshalb muss ich mir die Chunks auch noch mit "start_index:stop_index" zusammenbauen. Wuärgs.
|
|
|
|
|
|
|
Sorry, ich musste in's nächste (total wichtige!) Meeting, deshalb war ich etwas kurz angebunden.
Der Gag vom numpy Code oben ist, dass statt auf den echten Daten die ganzen Indexing-Operationen auf einem "Index-Array" gemacht werden - wie du bestimmt mittlerweile auch herausgefunden hast.
Die Kosten davon sind dass man ein np.arange in der Größe der Daten initialisiert und darauf Operationen macht. In deinem Fall wären das 25920000 * 8 byte ~ 208 MB . Daraus macht man dann eine Liste aus 1D-Indizes, die man gerne aus der Datei holen möchte (und die du z.b. in h5py dann verwenden kannst). Man kann dann auch die Shape der Indexing-Operation kopieren, um die gesubsampleten Daten aus dem 1D-Array in die richtige Form zu bringen.
Ich glaube ich verstehe noch nicht so ganz warum es in deinem Fall nicht praktikabel ist, kannst du das ein bisschen genauer beschreiben? Mir ist auch nicht ganz klar warum die HDF5-Daten mit knapp 26 Mio Einträgen 10GB groß sind, das passt nicht ganz. 26 Mio float64 sind ja auch nur rund 200MB.
(Ich bleibe aber trotzdem dabei vielleicht einfach die Kröte zu schlucken und die Dateien in eine sinnvolle Repräsentation umzurechnen bevor man weitermacht, dir selbst zuliebe.)
---
In dem Link zum Fancy indexing steht der vielsagende Satz "Use this with caution, as the underlying HDF5 mechanisms may have different performance than you expect." - Ich würde da bisschen benchmarking anraten . Speziell auch "Very long lists (> 1000 elements) may produce poor performance".
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von B0rG* am 03.04.2024 16:56]
|
|
|
|
|
|
Ich verstehe deinen Ansatz, habe ich auch überlegt. Aber ich muss das Resultat trotzdem nochmal analysieren um aus der index Liste zusammenhängende slices zu bauen, aber das kriegt man ja zur Not hin. Ich schaue mal, wie sich das in Realität verhält.
|
|
|
|
|
|
|
Das ist ja wie ein Coding-Interview hier!
|
Code: |
In [1]: size=32; indices = np.arange(size)[np.random.choice([True, False], size=[size])]
In [2]: indices
Out[2]: array([ 1, 2, 4, 5, 8, 9, 10, 13, 16, 17, 19, 20, 21, 25, 30])
In [3]: diffs = np.diff(indices, prepend=-10); diffs
Out[3]: array([11, 1, 2, 1, 3, 1, 1, 3, 3, 1, 2, 1, 1, 4, 5])
In [4]: diffs == 1
Out[4]:
array([False, True, False, True, False, True, True, False, False,
True, False, True, True, False, False])
In [5]: is_consecutive_index = diffs == 1
In [6]: is_consecutive_index
Out[6]:
array([False, True, False, True, False, True, True, False, False,
True, False, True, True, False, False])
In [7]: is_start_of_slice = ~is_consecutive_index
In [8]: slice_start_indices = np.where(is_start_of_slice)[0]
In [9]: slice_start_indices
Out[9]: array([ 0, 2, 4, 7, 8, 10, 13, 14])
In [10]: slice_lengths = np.concatenate([np.diff(slice_start_indices), [1]])
In [11]: slice_lengths
Out[11]: array([2, 2, 3, 1, 2, 3, 1, 1])
In [12]: indices
Out[12]: array([ 1, 2, 4, 5, 8, 9, 10, 13, 16, 17, 19, 20, 21, 25, 30])
In [13]: for start, length in zip(slice_start_indices, slice_lengths):
...: print(indices[start:start+length])
...:
[1 2]
[4 5]
[ 8 9 10]
[13]
[16 17]
[19 20 21]
[25]
[30]
|
|
e/ oh oh, das concatenatede [1] ist ein Bug. Äh, exercise for the reader.
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von B0rG* am 03.04.2024 18:15]
|
|
|
|
|
|
Sehr nett, wäre aber nicht nötig gewesen. ich benchmarke morgen mal
|
|
|
|
|
|
|
Interessantes Statement von einer frustrierten Akademikerin aus der Physik. Fühlte mich n bisschen an WoS erinnert :
|
|
|
|
|
|
|
<bei mir suckte es>
WARUM DIE ACADEMIA VOLLSTÄNDIG SAUGT
|
|
|
|
|
|
|
Da steckt mit Sicherheit auch ne menge Frust drin. Die Kritik finde ich aber schon berechtigt. Ich war jetzt nie nach dem Studium in der Forschung, habe aber Profs kennen gelernt die sich als Drittmittelkönig und ähnlichem bezeichnet haben.
Und die Mühle, durch die das akademische Prekariat gedreht wird ist halt schon Real. Siehe auch die neuen Tarifabschlüsse im akademischen Umfeld die solche Entwicklungen verhindern sollen.
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Strahlung-Alpha am 11.04.2024 22:25]
|
|
|
|
|
|
kann in dem Begriff nicht grundlegend was Negatives sehen
|
|
|
|
|
|
|
Bei ihr kommt halt noch hinzu, dass sie in einem Buch von Lee Smolin schon als Postdoc als "kommender Star" verkauft wurde. Und sie hat auch einiges drauf. Dass sie keine feste Stelle bekommen hat, ist schon recht hart.
Das Video fand ich vor allem interessant, weil es wunderbar meine Vorurteile über den Autor einer bekannten Lehrbuchreihe bestätigte. (Und warum diese Lehrbücher eigentlich nur als Übungssammlungen taugen.)
And therefore never send to know for whom the bell tolls; it tolls for thee.
|
|
|
|
|
|
|
Puh, gerade mal nachgeschaut...hatte da einen berühmten Autor in Verdacht der aber nicht am Institut von Hossenfelders Doktorarbeit war.
|
|
|
|
|
|
|
Ich kenne meine Pappenheimer.
Ich nehme an, du hast auf Nolting getippt? Noltings Bücher sind aus einem anderen Holz geschnitzt. Ich mag sie nicht, aber sie sind koheränter.
If that's poetry, don't quit your day job.
|
|
|
|
|
|
|
Ja, Nolting. Klassiker.
Die Reihe ist halt beliebt, weil sie eine der wenigen Reihen mit Aufgaben UND Lösungen waren.
Und didaktisch fand ich sie nicht schlecht. Könnte mit denen immer gut lernen.
Ich denke aber, ihr geht es um die Reihen von Walter Greiner.
Treffer?
|
|
|
|
|
|
|
Versenkt.
Greiner funktioniert besser, wenn man nur eine Lösung sucht und nicht das ganze Buch lesen kann/will, weil … naja, wie sie es halt beschreibt. Es ist sehr repetitiv. Nolting ist noch kein Landau, Lifschitz, aber erfordert doch mehr lineares Lesen, um viel rauszuholen. Und ich habe nie gerafft, warum er Thermodynamik und spezielle Relativitätstheorie unbedingt in einen Band zwängen musste. Und die späteren Bücher waren mir zu "kondensiert".
Ich würde ja gerne mal selbst meine Bücher schreiben, aber dafür brauche ich die passende Stelle.
And therefore never send to know for whom the bell tolls; it tolls for thee.
|
|
|
|
|
|
|
| Zitat von Strahlung-Alpha
Da steckt mit Sicherheit auch ne menge Frust drin. Die Kritik finde ich aber schon berechtigt.
| |
Ich würde so ziemlich alles was sie sagt so unterschreiben. Wenn ich ein System kennengelernt habe auf das das Prädikat "patriarchal" passt, dann ja wohl die Akademia. Das gilt für Geschelchter, aber das gilt noch viel mehr für die Attitüde, dass man halt einen wichtigen Gönner braucht und schon irgendwie an den richtigen Institutionen sein muss, sonst wird's halt nix.
Ich habe meine Zeit in der Akadamia durchaus genossen, aber ich bin nicht traurig auf diesen Mist (zumindest jetzt gerade) nicht mehr angewiesen zu sein und coole Sachen in der Industrie zu machen, die ich vermutlich an der Uni nie machen könnte. Kann das nur empfehlen.
|
|
|
|
|
|
|
Ich kann das Video auch 100% unterschreiben. Erfolg in Academia bedeutet einfach nur, dass man viele Drittmittel einwirbt. Voraussetzung dafür sind Paper und hotte topics.
--
B0rg, sorry, dass ich noch nicht geantwortet habe. Ich hab die "virtual index data" ( ) Methode getestet. Das Problem ist, dass sobald ich mehr als ein paar Slices aus dem HDF5 file lade, wird das hin-und-her mit der I/O langsamer als wenn ich stumpf die ganze Datei in den Speicher lade und alles weitere im RAM mache. Deshalb habe ich es erstmal in die Schublade gelegt.
|
|
|
|
|
|
|
Kleiner Nachtrag dazu: Ein Teil ihres Problems ist aber auch, dass sie nah an oder gar in D bleiben wollte. Und dann halt auch die US-amerikanische Perspektive zu sehen bekam, die ich bisher vermeiden konnte. Da sind Drittmittel und Grants und Projekte sehr viel wichtiger als in anderen (auch europäischen) Ländern (und es gibt Länder, wo die noch wichtiger sind, z.B. Estland). Ohne Zweikörperproblem ist man (lies: ich) schon etwas flexibler und kann z.B. eher auf Länder zielen, die sowas wie existente Lehrstellen und sonstigen akademischen Mittelbau haben, für den diese Sorte Gelder nicht ganz so wichtig sind.
I have an equation; do you have one, too?
|
|
|
|
|
|
|
| Zitat von Wraith of Seth
Kleiner Nachtrag dazu: Ein Teil ihres Problems ist aber auch, dass sie nah an oder gar in D bleiben wollte. Und dann halt auch die US-amerikanische Perspektive zu sehen bekam, die ich bisher vermeiden konnte. Da sind Drittmittel und Grants und Projekte sehr viel wichtiger als in anderen (auch europäischen) Ländern (und es gibt Länder, wo die noch wichtiger sind, z.B. Estland). Ohne Zweikörperproblem ist man (lies: ich) schon etwas flexibler und kann z.B. eher auf Länder zielen, die sowas wie existente Lehrstellen und sonstigen akademischen Mittelbau haben, für den diese Sorte Gelder nicht ganz so wichtig sind.
I have an equation; do you have one, too?
| |
Finde das problematisch, dass du schon so sehr internalisiert hast, dass das irgendwie normal ist, in Deutschland einfach keine Stelle zu bekommen.
Das ist nicht nur ihr Problem, sondern ein riesiges Problem. Gibt Leute, denen das dann egal genug ist, wenn sie alle paar Jahre auf einem anderen Kontinent 'ne neue Stelle haben (wie dir), aber das ist schon ziemlich bullshit.
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Gurkenhans am 18.04.2024 21:19]
|
|
|
|
|
|
Ja. Das ist ein Problem.
You need a reason to live! You don't need excuses to die!
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Wraith of Seth am 18.04.2024 23:09]
|
|
|
|
|
Thema: pOT-lnformatik, Mathematik, Physik XXIV |
|