Frage

Ich habe ein Array mit mehreren Abmessungen (x, y, Kanäle, z, Zeitschritte). Die Rohdaten werden jedoch in einem TIFF-Bild als einzelner Stapel von (x, y, Kanälen) mit Z * Time-Trecrat-Frames gespeichert.

Schließlich gibt das Image.getData () -Funktion von der Pillow ein 1D-Array-ähnliches Objekt zurück, das neu formuliert werden muss.

Was ist der beste Weg, um dies in HDF5 zu lesen, wenn der Datensatz zu groß ist, um in den Speicher zu passen? Ist es möglich, das Array erneut umzusetzen, sobald er in HDF5 geschrieben wurde, oder um 1D-Daten auf eine Weise zu schreiben, dass sie automatisch ein Array füllt (dh schreibt, mit x variierenden schnellsten, y zweitschnellsten usw.) aktualisieren : so etwas wie numpy.ndarray.flat < / a> wäre ideal.

Hier ist, was ich bisher versucht habe (IMG ist Pil.Image, dset ist ein H5py-Datensatz):

1) Einzelrahmen lesen. Diese Methode ist zu langsam, da er ~ 20min für 300 MB in 1000 Frames dauert. Die meiste Zeit wird in der DSET []= ein Anruf ausgegeben.

generasacodicetagpre.

2) unvollständig: Lesen in Brocken. Dies ist viel schneller (2min für das gleiche Dataset), aber ich habe nur für ein 4D-Bild (SX, SY, SY, -Kanäle, Zeitschritte) gearbeitet und benötigen eine zusätzliche Dimension für Z-Slices:

generasacodicetagpre.

War es hilfreich?

Lösung

Option 1 war die richtige Antwort.Es macht jedoch einen großen Unterschied, welcher Maß am schnellsten variiert:

~ 15 Minuten:

generasacodicetagpre.

~ 3 Minuten:

generasacodicetagpre.

Um diese Daten schnell zu lesen, sollte der schnellste variierende Index nicht zuerst sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top