我注意到复杂无穷大的有趣结果。
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错误吗?我应该做些什么不同的事情?
最佳答案
这不是 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)
关于python - 为什么具有复杂无穷大的 NumPy 操作会导致有趣的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38777914/