我注意到有复杂无穷大的有趣结果.
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
Run Code Online (Sandbox Code Playgroud)
这是nan相关的.但最终的结果是奇怪的.
这是一个numpy bug吗?我应该采取哪些不同的做法?
这不是NumPy的错误.numpy.inf是一个常规的Python浮点数,奇怪的结果来自常规的Python复数乘法算法,它是这样的:
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;
}
Run Code Online (Sandbox Code Playgroud)
当输入具有无限的实部或虚部时,复数乘法往往会导致inf-inf减法和0*inf乘法,从而导致nan结果中的分量.我们可以看到它1j * numpy.inf有一个nan组件和一个inf组件:
In [5]: 1j * numpy.inf
Out[5]: (nan+infj)
Run Code Online (Sandbox Code Playgroud)
并将结果乘以1产生两个nan组件:
In [4]: 1j * numpy.inf * 1
Out[4]: (nan+nanj)
Run Code Online (Sandbox Code Playgroud)