Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Python: вычисление статистики по подмножеству изображения

Автор вопроса: LucaОтветов: 2

У меня есть изображение RGB, которое представлено в виде массива numpy размера (500, 500, 3). У меня также есть массив размера (500, 500), где каждый пиксель имеет целочисленное значение от 0 до 99 включительно. Это в основном делит изображение на множество субрегионов. Пиксели, принадлежащие подмассиву, имеют один и тот же целочисленный индекс.

Я заинтересован в выполнении некоторых вычислений, таких как вычисление среднего значения и стандартного отклонения для каждого из этих подмножеств. Я могу сделать это, перебирая изображение следующим образом (например, для вычисления среднего значения):

# image is of size (500, 500, 3) ->RGB values
# label is of size (500, 500) -> contains integers
import numpy as np

mean = np.zeros((100, 3))
for i in range(0, 100):
    count = 0
    for x in range(0,500):
        for y in range(0,500):
            if label[x, y] == i:
                mean[i, :] += image[x, y,:]
                count = count + 1

    # Compute the mean
    if count > 0:
        mean[i,:] /= count

То, как я это делаю, включает в себя множество циклов, и это кажется совершенно не питоническим, и мне было интересно, есть ли лучший (в смысле скорости) способ сделать это.

pythonnumpyloopsperformancevectorization

Ответы

Ответ 1 · рейтинг 4 · Daniel

Используйте логическое индексирование и маски:

image[label==i,:].mean(0)

Ответ 2 · рейтинг 1 · yurib

вы можете сделать его намного более "питоновским", но что касается цикла, вы можете потерять первый цикл, извлекая фактическое текущее значение intenger из label, используя координаты: i=label[x:y] вместо того, чтобы перебирать все возможные значения.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы