计算掩码的numpy数组给定轴的模式

时间:2019-12-15 10:04:13

标签: python numpy scipy

我想计算numpy数组中的列模式,从计算中排除特定值(0)。

示例numpy数组:

n=np.array([[0,2,1], [0,1,3], [1,2,3]])
>array([[0, 2, 1],
   [0, 1, 3],
   [1, 2, 3]])

为值不等于0的地方创建掩码

m_mask = n != 0    
>array([[False,  True,  True],
   [False,  True,  True],
   [ True,  True,  True]])

应用遮罩并计算轴0上的平均值:

from scipy.stats import mode

new_m = np.ma.array(n, mask = m_mask)
m=mode(new_m, axis=0)
m[0]  #access the values not the count
>array([[0, 2, 3]])

似乎scipy.stats.mean可能忽略了被遮罩的数组?

关于如何实现此目标的任何想法?

1 个答案:

答案 0 :(得分:2)

我认为np.ma.array(...)不适合这里。您可以替换为分配new_m的行:

new_m = np.where(m_mask, n, np.nan)

({scipy.mode(...)将忽略nan-s)。 输出:

[[1. 2. 3.]]