J'effectue une opération dans laquelle je dois calculer la somme de toute l'intensité de pixel, si la valeur de pixel est> 0. Actuellement, j'itère à travers chaque pixel, ce qui est plus lent. Quelqu'un peut-il suggérer un moyen plus rapide d'améliorer mon code?

h, w = image.shape[:]
total_intensity = 0
for x in range(h):
    for y in range(w):
        if (image[x][y] > 0):
            total_intensity += image[x][y]
1
snehi pachchigar 11 mars 2019 à 21:34

2 réponses

Meilleure réponse

Si l'image est un tableau numpy, vous pouvez simplement faire ceci:

total_intensity = image[image > 0].sum()

Si vous avez une très grande image, vous devriez vous soucier des problèmes de débordement dans la somme, donc je vous suggère fortement de lancer d'abord l'image

image = np.int64(image)
2
Manuel Aguado Martinez 11 mars 2019 à 19:10

Tu peux le faire:

total_intensity = sum(sum(filter(lambda i: i > 0, image[j])) for j in image)

Où 0 votre condition d'intensité minimale

0
Sir Galan 11 mars 2019 à 18:45