Suite

Tracer une "grande" image avec des points avec matplotlib - MemoryError


Je veux tracer une image de 3193 x 3293 pixels avec 1502 points. Lors de l'exécution dans une image plus petite et moins de points (934 722 pixels et 60 points), tout fonctionne parfaitement.

J'ai écrit comme ceci :

# Je donne juste les caractéristiques générales des données ; img = numpy.ndarray, dtype = uint8, shape = (3193,3293) points = numpy.ndarray, dtype = int32, shape = (1502,2) plt.imshow(img, cmap=plt.cm.gray_r) plt. autoscale(False) plt.plot(points[:, 1], points[:, 0], 'r.', markersize = 15) plt.axis('off') plt.show()

Existe-t-il un autre moyen de le faire sans utiliser autant de mémoire ?


matplotlib.imshow()ne peut tracer des niveaux de gris que s'ils sont de type flottant. Votre erreur de mémoire est probablement due à une copie interne, qui modifie votre type deuint8àfloat32/64.

Avez-vous assez de mémoire pour travailler directement avecimg = numpy.ndarray, dtype = float32? Sinon, votre meilleur pari est d'écrire l'image directement sur le disque, en utilisant par exemple PIL, qui devrait être capable de prendredtype = uint8tableaux en entrée.