具有无穷大的复数的n mean平均值

时间:2017-04-26 06:01:52

标签: python python-3.x numpy mean infinite

numpy似乎不是复杂无穷大的好朋友

虽然我们可以评估:

In[2]: import numpy as np

In[3]: np.mean([1, 2, np.inf])
Out[3]: inf

以下结果更加繁琐:

In[4]: np.mean([1 + 0j, 2 + 0j, np.inf + 0j])
Out[4]: (inf+nan*j)
...\_methods.py:80: RuntimeWarning: invalid value encountered in cdouble_scalars
  ret = ret.dtype.type(ret / rcount)

我不确定想象中的部分对我有意义。但如果我错了,请发表评论。

有关与numpy中复杂无穷大相互作用的任何见解?

3 个答案:

答案 0 :(得分:4)

当您在数组中使用np.inf运行函数时,结果将是np.meannp.max()等其他函数的无穷大对象。但在这种情况下计算mean(),因为你有复数和无穷大复数被定义为复杂平面中的无限数,其复杂参数是未知或未定义的,你&# 39;重新获得non*j作为想象的部分。

为了解决这个问题,你应该忽略这些数学运算中的无穷大项。您可以使用isfinite()函数来检测它们并在有限项上应用该函数:

In [16]: arr = np.array([1 + 0j, 2 + 0j, np.inf + 0j])

In [17]: arr[np.isfinite(arr)]
Out[17]: array([ 1.+0.j,  2.+0.j])

In [18]: np.mean(arr[np.isfinite(arr)])
Out[18]: (1.5+0j)

答案 1 :(得分:3)

解决方案

为了计算平均值,我们将总和除以实数。由于类型促销,这种划分会导致问题(见下文)。为避免类型提升,我们可以分别为总和的实部和虚部手动执行此除法:

n = 3
s = np.sum([1 + 0j, 2 + 0j, np.inf + 0j])
mean = np.real(s) / n + 1j * np.imag(s) / n
print(mean)  # (inf+0j)

原理

这个问题与numpy无关,而是与复杂分裂的执行方式有关。请注意((1 + 0j) + (2 + 0j) + (np.inf + 0j)) / (3+0j)也会导致(inf+nanj)

结果需要分成真实和图像部分。对于除法,即使你除以实数,操作数也会被提升为复数。所以基本上这个部门是:

 a + bj
--------
 c + dj

divisoin操作不知道d=0。因此,要将结果拆分为实数和虚数,必须摆脱分母中的j。这是通过将分子和分母与复共轭相乘来实现的:

 a + bj     (a + bj) * (c - dj)     ac + bd + bcj - adj
-------- = --------------------- = ---------------------
 c + dj     (c + dj) * (c - dj)        c**2 + d**2

现在,如果a=infd=0这个词a * d * j = inf * 0 * j = nan * j

答案 2 :(得分:1)

因为类型推广。

当您使用真实的(inf + 0j) / 2进行复合体划分时,(实际)除数会被提升为2 + 0j

通过复数除法,虚部等于(0 * 2 - inf * 0) / 4。请注意这里的inf * 0是一个不确定的表单,它的计算结果为NaN。这使得虚部NaN

回到主题。当numpy计算复杂数组的平均值时,它确实没有尝试做任何聪明的事情。首先,它通过"添加"来减少数组。操作,获得总和。之后,总和除以计数。这个总和在实部中包含inf,当除数(计数)从积分类型提升到复杂浮点时,会导致上述问题。

编辑:关于解决方案的一个词

IEEE浮点"无穷大"是一个非常原始的构造,代表1 / 0之类的不确定形式。这些表单不是常数,而是可能的限制。特殊infNaN"浮点数"是占位符,通知您存在不确定形式。他们对限制的存在或类型一无所知,你必须通过数学语境来确定限制。

即使对于实数,基本限制也可能取决于您如何接近限制。肤浅的1 / 0形式可以转化为正或负无穷大。在复杂的平面上,事情变得更加复杂(好)。例如,您可能会遇到分支切割和(不同类型)奇点。没有适合所有人的通用解决方案。

Tl; dr:面对模糊/不完整/损坏的数据修复潜在问题,或证明最终计算结果可以抵御这种腐败(可能发生)。