Je trouve la méthode astype() de tableaux chiffrés pas très efficace. J'ai un tableau contenant 3 millions de points Uint8. La multiplier par une matrice 3x3 prend 2 secondes, mais convertir le résultat de uint16 en uint8 prend une seconde.numpy: Comment convertir un type de tableau rapidement
Plus précisément:
print time.clock()
imgarray = np.dot(imgarray, M)/255
print time.clock()
imgarray = imgarray.clip(0, 255)
print time.clock()
imgarray = imgarray.astype('B')
print time.clock()
produit scalaire et mise à l'échelle prend 2 sec
découpage est conversion de type 200 msec prend 1 sec
Compte tenu du temps pris par les autres opérations, je me attends astype
être plus rapide. Existe-t-il un moyen plus rapide de faire une conversion de type, ou ai-je tort quand j'imagine que la conversion de type ne devrait pas être si difficile?
Edit: le but est de sauver le tableau final 8 bits dans un fichier
Pourquoi avez-vous besoin d'aller à uint16 et à nouveau? Est-il possible d'avoir M comme une matrice uint8, alors vous n'avez pas besoin de la conversion. – u0b34a0f6ae
le résultat du produit scalaire dépassera la gamme uint8. À l'origine, j'utilisais une matrice float M, et je pensais que aller à l'entier me donnerait une certaine amélioration, mais ce n'est pas vrai. – shodanex
Ce qui prend tout ce temps, probablement, est d'accéder à tous les emplacements de mémoire. Ça a l'air dur à réparer. –