2017-09-13 4 views
1

Ich habe eine Reihe von Passungen Bilder: etwa 32000 Bilder mit der Auflösung (256,256). Der Dataset, den ich erstellen muss, ist matrixartig, also ist die Ausgabeform (32000, 256 * 256).Effizienter Weg zum Erstellen eines Datensatzes aus passt Bild

Die einfache Lösung ist eine for Schleife, wie samething:

#file_names is a list of paths 
samples=[] 
for file_name in file_names: 
    hdu=pyfits.open(file_name) 
    samples.append(hdu[0].data.flatten()) 
    hdu.close() 
#then i can use numpy.concatenate to have a numpy ndarray 

Diese Lösung ist sehr, sehr langsam. Was ist also die beste Lösung, um einen so großen Datensatz zu erstellen?

+0

Wenn Sie die Beispiele auskommentieren und ausführen, ist es immer noch langsam? Wenn ja, würde das bedeuten, dass Sie beim Öffnen und Schließen der FITS-Datei Engpässe haben. Sie können auch versuchen, die Astropie FITS-Leser http://docs.astropy.org/en/stable/io/fits/index.html#module-astropy.io.fits zu verwenden. –

Antwort

1

Dies ist nicht wirklich die wichtigste Antwort, aber ich fühlte, es war zu lang für einen Kommentar und ist relevant.

Ich glaube, es gibt ein paar Dinge, die Sie tun können, ohne Ihren Code anzupassen.

Python ist eine syntaktische Sprache und wird auf verschiedene Arten implementiert. Die traditionelle Implementierung ist CPython, die Sie von der Website herunterladen. Es gibt jedoch andere Implementierungen (siehe here).

Lange Geschichte kurz, versuchen Sie PyPy wie es oft deutlich schneller mit "Speicher-hungrig Python" wie Ihre läuft. Here ist ein sehr nettes Reddit-Post über die Vorteile von jedem, aber grundsätzlich PyPy verwenden, und optimieren Sie Ihren Code. Außerdem habe ich Numpy nie benutzt, aber dieses post schlägt vor, dass Sie vielleicht Numpy behalten und PyPy noch verwenden können.

(Normalerweise würde ich auch vorschlagen, dass Sie Cython verwenden, aber es scheint nicht schön überhaupt mit Numpy zu arbeiten. Ich weiß nicht, ob Cython keine Unterstützung für Numpy hat, aber Sie können das selbst googeln.) Gut Glück!

Verwandte Themen