У меня есть следующий воспроизводимый скрипт:
import numpy as np
c0, c1 = 0.000032, 3
S_test = np.ones((3,3), dtype=float)*300000
S_test[1,1] = 2000
np.where(S_test > 2000, 1, 1 - 1 / np.exp((c0 * S_test) ** c1) )
RuntimeWarning: overflow encountered in exp
array([[1.00000000e+00, 1.00000000e+00, 1.00000000e+00],
[1.00000000e+00, 2.62109643e-04, 1.00000000e+00],
[1.00000000e+00, 1.00000000e+00, 1.00000000e+00]])
Я пытаюсь выяснить 1) Почему я получаю эту ошибку переполнения и 2) как с ней справиться, чтобы избежать просто игнорируйте его, потому что я не совсем уверен, каковы последствия его игнорирования в первую очередь.
np.where()
должен сначала распознать, где S_test > 2000
, а затем вернуть 1 для этих значений, альтернативно, где это условие не выполняется np.where()
должно возвращать 1 - 1 / np.exp((c0 * S_test) ** c1)
Я пытался отдельно вычислить 1 - 1 / np.exp((c0 * 2000) ** c1)
, и это оценивается очень хорошо, как я и ожидал.
Любое понимание было бы замечательно.