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个,那么它就变得很麻烦。我可以写一个列表理解,但希望有更好的选择。
[np.mean(m2[m==i]) for i in np.unique(m)]
熊猫为您提供快速而优雅的解决方案:
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))