取带有掩码元素的 numpy ndarray 的平均值

fer*_*rgu 4 python arrays numpy mask

我有一个从实验中获取的 MxN 值数组。其中一些值无效并设置为 0 以指示此类情况。我可以使用构造有效/无效值的掩码

mask = (mat1 == 0) & (mat2 == 0)
Run Code Online (Sandbox Code Playgroud)

它产生一个 MxN 布尔数组。应该注意的是,屏蔽位置并不完全遵循矩阵的列或行 - 因此简单地裁剪矩阵不是一个选择。

现在,我想沿数组的一个轴取平均值(EG 最终得到一个 1xN 数组),同时在平均值计算中排除那些无效值。直觉上我以为

 np.mean(mat1[mask],axis=1)
Run Code Online (Sandbox Code Playgroud)

应该这样做,但是该mat1[mask]操作会生成一个一维数组,它似乎只是masktrue 的元素 - 当我只想要数组的一维上的平均值时,这没有帮助。

有没有“python-esque”或numpy的方法来做到这一点?我想我可以使用蒙版来设置蒙版元素并NaN使用np.nanmean- 但这仍然感觉有点笨拙。有没有办法“干净”地做到这一点?

lst*_*ger 5

我认为做到这一点的最佳方法是:

masked = np.ma.masked_where(mat1 == 0 && mat2 == 0, array_to_mask)
Run Code Online (Sandbox Code Playgroud)

然后取平均值

masked.mean(axis=1)
Run Code Online (Sandbox Code Playgroud)