复杂的无限 - 有趣的reslts - 一个numpy bug?

时间:2016-08-04 21:45:30

标签: python numpy

我注意到复杂无穷大的有趣结果。

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相关的。但最终的结果是奇怪的。

这是一个numpy bug吗?我应该采取哪些不同的做法?

1 个答案:

答案 0 :(得分:5)

这不是NumPy的错误。 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)