Python 加权平均,其中一个权重是无限的

Python 加权平均,其中一个权重是无限的,python,numpy,Python,Numpy,使用NumPy的加权平均值,我期望一个具有无限权重的元素控制结果,但它返回NaN >>> np.average([1,2], weights=[np.inf, 1]) nan 这是故意设计的吗?这似乎违反直觉 编辑:这里有一个更简单的例子: >>> np.average([1], weights=[np.inf]) nan 虽然不是故意的,但它在数学上是正确的 你会得到一个类似无穷大的公式。结果取决于哪个无穷大。这是胡说八道 你需要具体的数字作为权重,所

使用NumPy的加权平均值,我期望一个具有无限权重的元素控制结果,但它返回
NaN

>>> np.average([1,2], weights=[np.inf, 1])
nan
这是故意设计的吗?这似乎违反直觉


编辑:这里有一个更简单的例子:

>>> np.average([1], weights=[np.inf])
nan

虽然不是故意的,但它在数学上是正确的

你会得到一个类似无穷大的公式。结果取决于哪个无穷大。这是胡说八道


你需要具体的数字作为权重,所以你可以使用非常大的数字

(1*inf+2*1)/(inf+1)
==
inf/inf
。你认为呢?我认为数学的正确性是故意的,尤其是在numpy中而且
inf/inf
的结果不依赖于任何东西。如果只有一个权重是无限的,比如我上面的例子中的第一个元素,那么加权平均(w_0*x_0+w_1*x_1)/(w_0+w_1)变成,在w_0趋于无穷的极限下,(w_0*x_0)/w_0=x_0。然而,如果两个或更多的权重是无限的,那么我同意你的逻辑。@Garrett是的,这是一个不同的问题,有不同的解决方案。顺便说一句:你刚刚发现对无穷符号的操作和对极限的操作是不同的。这在数学上是正确的。毕竟
x/x->1
,即使
inf/inf
仍然未定义。否。Numpy将只使用给定的公式,该公式以inf/inf结尾。您可以添加一些额外的逻辑,如“如果存在inf权重,则”)。如果w0=inf,您的计算在数学上是错误的。您可能认为此计算是可能的,但在其他情况下,您将陷入麻烦。例如,如果一个点为x0=0,您期望得到什么;w0=inf和第二x1=inf;w1=1?@sweber,在你给出的例子中,你得到了(不确定+x1)/(w0+1),其中x1和w0是无限的,但可能不相等。这当然不同于(w1*x1)/w1。