2017-09-13 3 views
1

J'ai un ensemble d'images ajustées: environ 32000 images avec une résolution (256,256). L'ensemble de données que je dois construire est semblable à une matrice, donc la forme de sortie est (32000, 256 * 256).Un moyen efficace de créer un ensemble de données à partir d'une image

La solution simple est une boucle for, samething comme:

#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 

Cette solution est très, très lent. Alors quelle est la meilleure solution pour construire un si gros ensemble de données?

+0

Si vous commentez la partie samples.append et l'exécutez, est-ce encore lent? Si oui, alors cela suggérerait que vous avez goulot fermé sur l'ouverture et la fermeture du fichier FITS. Vous pouvez également essayer d'utiliser les lecteurs astrits FITS http://docs.astropy.org/en/stable/io/fits/index.html#module-astropy.io.fits. –

Répondre

1

Ce n'est pas vraiment destiné à être la réponse principale, mais j'ai estimé que c'était trop long pour un commentaire et est pertinent.

Je crois qu'il y a quelques choses que vous pouvez faire sans ajuster votre code.

Python est un langage syntaxique et est implémenté de différentes manières. L'implémentation traditionnelle est CPython, qui est ce que vous téléchargez sur le site Web. Cependant, il existe d'autres implémentations (voir here).

Longue histoire courte, essayez PyPy car il fonctionne souvent beaucoup plus rapidement avec "python faim de mémoire" comme le vôtre. Here est un très bon post de reddit sur les avantages de chacun, mais essentiellement utiliser PyPy, et optimiser votre code. De plus, je n'ai jamais utilisé Numpy mais ce post suggère que vous pourriez garder Numpy et utiliser PyPy.

(Normalement, je suggère aussi que vous utilisiez Cython, mais cela ne semble pas fonctionner du tout avec Numpy.Je ne sais pas si Cython a un support pour Numpy, mais vous pouvez google que vous-même.) Bonne la chance!