gpt4 book ai didi

python - 非零值的 Numpy 平均值

转载 作者:太空狗 更新时间:2023-10-29 17:43:06 26 4
gpt4 key购买 nike

我有一个大小为 N*M 的矩阵,我想求出每一行的平均值。值从 1 到 5,没有任何值的条目设置为 0。但是,当我想使用以下方法找到平均值时,它给了我错误的平均值,因为它还计算了值为0.

matrix_row_mean= matrix.mean(axis=1)

我怎样才能得到非零值的平均值?

最佳答案

获取每行中非零的计数,并将其用于计算每行求和的平均值。因此,实现看起来像这样 -

np.true_divide(matrix.sum(1),(matrix!=0).sum(1))

如果你使用的是旧版本的 NumPy,你可以使用计数的 float 转换来替换 np.true_divide,就像这样 -

matrix.sum(1)/(matrix!=0).sum(1).astype(float)

sample 运行-

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)

从性能的角度来看,我会推荐第一种方法。

关于python - 非零值的 Numpy 平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38542548/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com