为什么复杂无穷大的NumPy运算会导致有趣的结果?

2024-04-23 07:12:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我注意到了复杂无穷的有趣结果。你知道吗

In [1]: import numpy as np

In [2]: np.isinf(1j * np.inf)
Out[2]: True

In [3]: np.isinf(1 * 1j * np.inf)
Out[3]: True

In [4]: np.isinf(1j * np.inf * 1)
Out[4]: False

这与nan有关。但最终的结果很奇怪。你知道吗

它是一个小虫子吗?有什么我应该改变的吗?你知道吗


Tags: inimportnumpyfalsetrueasnpnan
1条回答
网友
1楼 · 发布于 2024-04-23 07:12:43

它不是一个小虫子。numpy.inf是一个正则Python浮点,奇怪的结果来自正则Python复数乘法算法,即this

Py_complex
_Py_c_prod(Py_complex a, Py_complex b)
{
    Py_complex r;
    r.real = a.real*b.real - a.imag*b.imag;
    r.imag = a.real*b.imag + a.imag*b.real;
    return r;
}

当输入有无限个实部或虚部时,复数乘法往往导致inf-inf减法和0*inf乘法,从而导致结果中的nan分量。我们可以看到1j * numpy.inf有一个nan成分和一个inf成分:

In [5]: 1j * numpy.inf
Out[5]: (nan+infj)

将结果乘以1产生两个nan分量:

In [4]: 1j * numpy.inf * 1
Out[4]: (nan+nanj)

相关问题 更多 >