Est-il un moyen pratique d'appliquer une table de recherche pour un grand tableau dans numpy?
J'ai une image lire dans numpy avec assez peu de pixels dans mon tableau résultant.
J'ai calculé une table de recherche avec 256 valeurs. Maintenant, je veux faire ce qui suit:
for i in image.rows:
for j in image.cols:
mapped_image[i,j] = lut[image[i,j]]
Yep, c'est exactement ce qu'un lut n'.
Seul problème, c'est: je veux faire de l'efficacité et de l'appel de cette boucle en python me permettra d'attendre quelques secondes pour qu'elle se termine.
Je sais de numpy.vectorize()
, c'est tout simplement une commodité fonction qui appelle le même code python.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez simplement utiliser
image
à l'index enlut
silut
est 1D.Voici une amorce sur l'indexation dans NumPy:
http://www.scipy.org/Tentative_NumPy_Tutorial#head-864862d3f2bb4c32f04260fac61eb4ef34788c4c
Compte également de l'indexation commence à
0
TheodrosZelleke réponse correcte, mais je voulais juste ajouter un peu de sans-papiers de la sagesse pour elle. Numpy fournit une fonction,
np.take
, qui, selon la documentation "fait la même chose que la fantaisie de l'indexation."Enfin, presque, mais pas tout à fait la même:
np.take
est environ 3 fois plus rapide! Dans mon expérience, lors de l'utilisation de la 3D lut pour convertir des images en RVB à d'autres espaces de couleurs, ajout de la logique à convertir l'apparence 3D-jusqu'à un 1D aplatie de recherche permet à un x10 accélérer.np.put
pendant un certain temps parce que je pensais que cela pourrait fonctionner. Quand il n'en a pas, je ne l'ai pas vérifié les autres fonctions. -.-take
.