python - 为什么具有复杂无穷大的 NumPy 操作会导致有趣的结果?

标签 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错误吗?我应该做些什么不同的事情?

最佳答案

这不是 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/

相关文章:

python - 在 Python 中隐藏代码或阻止代码编辑

python - 获取 Google Cloud PubSub 中单条消息的大小

python - 这个排序算法的名称是什么?是冒泡排序吗?最简单的排序?

python - numpy - 使用 numpy 一维数组的置换副本构建二维数组的最快方法

python - Twisted - 向选定的客户端发送数据

python - Azure VM 似乎会终止长时间运行的 MySql 查询

python - 将矩阵连接到张量

python - 从矩阵中获取具有最大和值的列

python - 与 numpy 的 np.random.RandomState 和 Python 的 random.Random 相互转换?

python - NumPy , python : automatically expand dimensions of arrays when broadcasting