python - 处理溢出错误: math range error in Python with NumPy

标签 python numpy error-handling cmath

我有以下 Python 代码

z =  [[complex(x,y) for x in range(1000)]for y in range(1000)]
nexp = np.frompyfunc(cmath.exp,1,1)
nexp(z)

我有 OverflowError:数学范围错误。

有没有办法找到数组的哪些元素出现错误并处理它? 我的意思是,如果我简单地迭代数组,我就可以做到这一点

for x in range(1000):
    for y in range(1000):
        try:
            z[x,y] = cmath.exp(z[x,y])
        except:
            z[x,y] = 0

最佳答案

为什么不使用 numpy 类型和方法来代替 complexcmath

演示:

In [302]: x = np.arange(701, 720) + 1j*np.arange(701, 720)

In [303]: y = np.exp(x)
~\Anaconda3_5.0\envs\py36\Scripts\ipython3:1: RuntimeWarning: overflow encountered in exp

这会产生:

In [304]: y
Out[304]:
array([ -2.51188899e+304 -1.13634915e+304j,  -1.08996190e+304 -7.41453166e+304j,   1.53588478e+305 -1.33828078e+305j,   5.31686829e+305 +1.5
4758929e+305j,   4.26896569e+305 +1.44345018e+306j,
        -2.67470300e+306 +3.09645066e+306j,  -1.10110029e+307 -1.57025773e+306j,  -1.25800559e+307 -2.74923036e+307j,   4.44084142e+307 -6.9
1528370e+307j,               inf +1.34684655e+304j,
                     inf             +infj,              -inf             +infj,              -inf             +infj,              -inf
        -infj,               inf             -infj,
                     inf             -infj,               inf             +infj,              -inf             +infj,              -inf
        +infj])

所有无限元素:

In [305]: y[np.isinf(y)]
Out[305]:
array([ inf +1.34684655e+304j,  inf             +infj, -inf             +infj, -inf             +infj, -inf             -infj,  inf
    -infj,  inf             -infj,  inf             +infj,
       -inf             +infj, -inf             +infj])

第一个无限元素的索引:

In [306]: np.isinf(y).argmax()
Out[306]: 9

关于python - 处理溢出错误: math range error in Python with NumPy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48158715/

相关文章:

python - 字符串对象不返回预期结果

python - 如何在图(.pb)中重新训练模型?

python - 如何在Python类中使用列表创建字典?

asp.net-mvc-3 - MVC3的奇怪行为

python - 警报信号未在无限循环中触发

python - 使用 Numpy 与硬编码进行标准化

python - 标准化 numpy 矩阵中的行

python-3.x - Pandas Dataframe 使用合并过滤结果。编码解码问题

java - 它不要求输入,直接通过

c++ - 如何防止Windows显示 "Debug Error! abort() has been called"对话框?