вычислить среднее значение массива numpy на основе уникального элемента другого массива - PullRequest
0 голосов
/ 26 марта 2019
m = np.array([[[1,2],[2,1]], [[1,1],[2,1]]])

array([[[1, 2],
        [2, 1]],

       [[1, 1],
        [2, 1]]])



m2 = np.array([[[0.4,0.5],[0.2,0.3]], [[0.3,0.4],[0.5,0.5]]])

array([[[ 0.4,  0.5],
        [ 0.2,  0.3]],

       [[ 0.3,  0.4],
        [ 0.5,  0.5]]])

Как рассчитать среднее значение m2 для каждого уникального элемента m? Я мог написать понимание списка, чтобы пройтись по элементам m, но мне было интересно, есть ли более простой способ сделать это. Подходит ли np.ma.masked_array в этом случае?

Это то, чего я пытаюсь достичь

1: np.mean(m2[m==1])
2: np.mean(m2[m==2])

это хорошо для пары элементов, но если у меня есть 100, то это становится громоздким. Я мог бы написать понимание списка, но надеялся на лучшую альтернативу.

Ответы [ 2 ]

1 голос
/ 26 марта 2019
[np.mean(m2[m==i]) for i in np.unique(m)]
0 голосов
/ 26 марта 2019

Панды дают вам быстрое и элегантное решение:

import pandas as pd    
df = pd.DataFrame(index=m.ravel(),data=m2.ravel())    
df.groupby(level=0).mean() 

#      0
#1  0.38
#2  0.40

оно работает за 30 мс с:

m = np.random.randint(100,size=(100,100,100))
m2 = np.random.random((100,100,100))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...