Numpy: применить маску к значениям, затем принять среднее значение, но параллельноPython

Программы на Python
Anonymous
Numpy: применить маску к значениям, затем принять среднее значение, но параллельно

Сообщение Anonymous »

У меня есть массив значений размером 1d:

Код: Выделить всё

v = np.array([0, 1, 4, 0, 5])
Кроме того, у меня есть двумерный массив логических масок (в производстве существуют миллионы масок):

Код: Выделить всё

m = np.array([
[True, True, False, False, False],
[True, False, True, False, True],
[True, True, True, True, True],
])
Я хочу применить каждую строку маски к массиву v, а затем вычислить среднее значение замаскированных значений.
Ожидаемое поведение:< /p>

Код: Выделить всё

results = []
for mask in m:
results.append(np.mean(v[mask]))

print(results) # [0.5, 3.0, 2.0]

Легко сделать последовательно, но я уверен, что параллельно есть красивый вариант? Одно решение, которое я нашел:

Код: Выделить всё

mask = np.ones(m.shape)
mask[~m] = np.nan
np.nanmean(v * mask, axis=1) # [0.5, 3.0, 2.0]

Есть ли другое решение, возможно, с использованием модуля np.ma? Я ищу решение, которое будет быстрее, чем два моих текущих решения.

Подробнее здесь: https://stackoverflow.com/questions/787 ... n-parallel

Вернуться в «Python»