np.ma.average()避免DivideByZero错误

时间:2018-08-17 13:47:48

标签: numpy matplotlib

我正在使用类似数量的方法

mean = np.ma.average(X,weights=weights, axis=1)

X是100列,1000行的2维数组。 weights具有相同的形状,结果mean为预期的1000行。与np.average()相比,优点在于对于权重均为0的行,我不会得到除以零的错误。然后当我像这样绘制平均值时,它看起来不错。

plt.hist(mean)

当所有权重均为0时,我不希望mean = 0,而是希望在绘图时跳过该行。这是怎么回事吗?还是权重为0时我会绘制额外的0?

@ anishtain4提供了另一种解决方案,可以完全满足您的要求。但是我想知道使用np.ma函数是否错误。会发生意想不到的事情吗?

1 个答案:

答案 0 :(得分:1)

您可以找到并非所有权重都为零的行的索引,然后使用该值过滤输出:

ind=np.any(weights,axis=1)
ans=np.mean(X*weights,axis=1)[ind]

编辑:

要保持尺寸不变并跳过图中的无效行,只需将其设置为np.nan。但是这些行的结果没有任何意义(但是我不认为这很重要)。因此代码如下:

ind=~np.any(weights,axis=1)
weights[ind]=np.nan
ans=np.mean(x*weights,axis=1)
plt.plot(ans)