麻木似乎不是复杂无穷大的好朋友。
我们可以评估:

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中与复杂无穷大相互作用的见解?

最佳答案

解决方案
为了计算平均值,我们用实数除以和。由于类型提升(见下文),此划分会导致问题。为了避免类型提升,我们可以对和的实部和虚部分别手动执行此划分:

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

09-06 07:43