python – 具有无穷大的复数的numpy平均值
发布时间:2020-12-16 22:59:14 所属栏目:Python 来源:网络整理
导读:numpy似乎不是复杂无穷大的好朋友 虽然我们可以评估: In[2]: import numpy as npIn[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: invali
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中复杂无穷大相互作用的任何见解? 解决方法
解
为了计算平均值,我们将总和除以实数.由于类型促销,这种划分会导致问题(见下文).为了避免类型提升,我们可以分别为总和的实部和虚部手动执行此除法: n = 3 s = np.sum([1 + 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 = inf且d = 0,则术语a * d * j = inf * 0 * j = nan * j. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |