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个元素,那么它将变得很麻烦。我可以写一个列表理解,但是希望有一个更好的选择。
答案 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))