Numpy np.ma.average()以避免被零除的错误

Numpy np.ma.average()以避免被零除的错误,numpy,matplotlib,Numpy,Matplotlib,我采用的是如下数量的方法: mean = np.ma.average(X,weights=weights, axis=1) X是一个100列1000行的2维数组权重具有相同的形状,结果平均值为预期的1000行。与np.average()相比的优点是,对于权重都为0的行,我不会得到除以零的错误。然后当我像这样画出平均值时,它看起来很好 plt.hist(mean) 当所有权重为0时,我不希望mean=0,而是希望在绘图时跳过该行。这是怎么回事?或者当权重为0时,我正在绘制额外的0 @anish

我采用的是如下数量的方法:

mean = np.ma.average(X,weights=weights, axis=1)
X
是一个100列1000行的2维数组<代码>权重具有相同的形状,结果
平均值
为预期的1000行。与np.average()相比的优点是,对于权重都为0的行,我不会得到除以零的错误。然后当我像这样画出平均值时,它看起来很好

plt.hist(mean)
当所有权重为0时,我不希望
mean=0
,而是希望在绘图时跳过该行。这是怎么回事?或者当权重为0时,我正在绘制额外的0


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

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

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)

是的,但这样我就改变了形状。我想跟踪
NAN
行,以及其他计算。例如,如果我想然后执行
ans1-Y
,我不能,因为
Y
将有1000行。@user7867665所以你想保持形状不变,这些行的结果无关紧要,你想在打印时跳过这些行吗?是的。我可以通过
numpy.ma
函数实现这一点。是否存在意外后果的危险?您的编辑给出了正确答案,但为了完整起见,我想特别了解对
numpy.ma