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

问题描述 投票:0回答:2
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个,那么它就变得很麻烦。我可以写一个列表理解,但希望有更好的选择。

python numpy
2个回答
1
投票
[np.mean(m2[m==i]) for i in np.unique(m)]

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))
© www.soinside.com 2019 - 2024. All rights reserved.