эффективный способ заполнения массива гистограмм - PullRequest
0 голосов
/ 06 августа 2020

есть ли у кого-нибудь идея сделать следующий код python быстрее и, возможно, без циклов for или его векторизации? Бьюсь об заклад, в numpy есть трюк или классная функция, чтобы сделать это, но я еще не нашел метода.

«img» - это numpy изображение uint8:

 histogram = np.empty((height, width, 256), dtype=np.uint16)
 max_bin = np.empty((height, width), dtype=np.uint16)
 while ...:
    img = ...
    for y in range(height):
        for x in range(width):
            histogram[y, x, img[y, x]] += 1

    for y in range(height):
        for x in range(width):
            max_bin[y,x] = np.argmax(histogram[y, x])

1 Ответ

0 голосов
/ 06 августа 2020

Для этого вы можете использовать функцию np.bincount, но она требует, чтобы все изображения загружались одновременно (по крайней мере, по частям). В вашем случае, вероятно, лучше использовать @njit.

Numba. Если у вас много маленьких изображений, вы можете выполнить эту операцию параллельно, используя локальные гистограммы потока, а затем суммировать эти локальные гистограммы, чтобы получить желаемый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...