根据另一个数组的唯一元素计算numpy数组的平均值

时间:2019-03-26 19:39:30

标签: python numpy

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 个答案:

答案 0 :(得分:1)

[np.mean(m2[m==i]) for i in np.unique(m)]

答案 1 :(得分:0)

熊猫为您提供了快速而优雅的解决方案:

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))