我注意到复杂无穷大的有趣结果。
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吗?我应该采取哪些不同的做法?
答案 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)