#python #numpy
#питон #numpy #python
Вопрос:
Я пытаюсь вычислить среднее значение тепловой карты для области ограничивающей рамки (фиолетовая маска над автомобилем) изображения. Оба объекта являются массивами numpy, но я изо всех сил пытаюсь найти подходящую функцию для вычисления среднего значения тепловой карты внутри маски.
Я добавил минимальный рабочий пример, который повторяет то, чего я пытаюсь достичь:
import numpy as np
mask = np.zeros((10,10))
mask[3:-3, 3:-3] = 1 # white square in black background
im = mask np.random.randn(10,10) # random image
masked = np.ma.masked_where(mask == 0, mask)
import matplotlib.pyplot as plt
plt.figure()
plt.imshow(im, 'BuGn')
plt.imshow(masked, 'jet', alpha=0.9)
plt.show()
где я хотел бы вычислить среднее значение im
внутри синего квадрата ( masked
).
У кого-нибудь есть какие-нибудь предложения?
Комментарии:
1. Вы пробовали какой-либо из методов из
statistics
модуля?2. Я думаю, что что-то вроде этого сделает работу:
mean = statistics.mean([statistics.mean([row for row in im]))
.3. @accdias Спасибо за ваше предложение, но я ищу, чтобы найти среднее значение
im
внутриmasked
4. Добро пожаловать, @Sam Comber.
Ответ №1:
Я думаю, вы ищете это:
#!/usr/bin/env python3
import numpy as np
# Make mask of first 4 diagonal elements
h, w = 6, 10
mask = np.zeros((h,w),dtype=np.uint8)
mask[0][0] = 1
mask[1][1] = 1
mask[2][2] = 1
mask[3][3] = 1
# Make image of random small numbers under 10 that Mark is capable of adding up
# Go for predictable randomness because Mark is not a physicist
np.random.seed(42)
im = np.random.randint(1,10,(h,w),dtype=np.uint8)
# Calculate mean of numbers where mask>0
mean = im[mask>0].mean()
Вот как выглядит маска:
array([[1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=uint8)
Вот как выглядит изображение:
Вот среднее:
In [33]: mean
Out[33]: 5.75
Проверьте:
(7 5 3 8) /4 = 23/4 = 5.75