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- 但这仍然感觉有点笨拙。有没有办法“干净”地做到这一点?
我认为做到这一点的最佳方法是:
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)