我有一个大小为N * M的矩阵,我想找到每一行的平均值。值是从1到5,并且没有任何值的条目设置为0。但是,当我想使用以下方法查找均值时,它给了我错误的均值,因为它还计算了具有值的条目0。
matrix_row_mean= matrix.mean(axis=1)
如何获得仅非零值的均值?
获取每一行的非零计数,并将其用于平均每一行的总和。因此,实现看起来像这样-
np.true_divide(matrix.sum(1),(matrix!=0).sum(1))
如果您使用的是较旧版本的NumPy,则可以使用count的float转换来替换np.true_divide
,例如-
matrix.sum(1)/(matrix!=0).sum(1).astype(float)
样品运行-
In [160]: matrix
Out[160]:
array([[0, 0, 1, 0, 2],
[1, 0, 0, 2, 0],
[0, 1, 1, 0, 0],
[0, 2, 2, 2, 2]])
In [161]: np.true_divide(matrix.sum(1),(matrix!=0).sum(1))
Out[161]: array([ 1.5, 1.5, 1. , 2. ])
解决该问题的另一种方法是用替换零,NaNs
然后使用np.nanmean
,这将忽略那些零NaNs
并实际上是原始的零zeros
,就像这样-
np.nanmean(np.where(matrix!=0,matrix,np.nan),1)
从性能的角度来看,我建议第一种方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句