我正在使用类似数量的方法
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
函数是否错误。会发生意想不到的事情吗?
答案 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)