我想计算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可能忽略了被遮罩的数组?
关于如何实现此目标的任何想法?
答案 0 :(得分:2)
我认为np.ma.array(...)
不适合这里。您可以替换为分配new_m
的行:
new_m = np.where(m_mask, n, np.nan)
({scipy.mode(...)
将忽略nan-s)。
输出:
[[1. 2. 3.]]