Изо всех сил пытаться понять Предупреждение во время выполнения для значения, введенного в степени при использовании numpy - PullRequest
0 голосов
/ 03 мая 2020
import numpy as np
d = 120
m = 45
x = np.arange(0, d, 1)
y = (m*np.sin((x**(1.1)+30)/(0.7*d))**2.2) - (m*np.sin((2*x**(1.1)+30)/(0.7*d))**2.2)    

выдает ошибку: running.py:26: RuntimeWarning: invalid value encountered in power Но я не понимаю, почему это происходит.

Спасибо за любую помощь

1 Ответ

2 голосов
/ 03 мая 2020
>>> m*np.sin((2*x**(1.1)+30)/(0.7*d))
array([ 15.73194637,  16.73121346,  17.86226504,  19.03958247,
        ...
         6.96013957,   5.16797026,   3.36497969,   1.55409031,
        -0.26174328,  -2.07953935,  -3.8962942 ,  -5.70898742,
        -7.5145872 ,  -9.31005568, -11.09235441, -12.85844979,
       -14.60531859, -16.3299535 , -18.02936862, -19.70060506,
       -21.34073643, -22.9468744 , -24.51617418, -26.04583993,
       -27.53313024, -28.97536339, -30.36992266, -31.71426152,
       -33.0059087 , -34.2424732 , -35.42164915, -36.54122056,
       -37.59906596, -38.59316286, -39.52159205, -40.38254179,
       -41.17431178, -41.89531695, -42.54409109, -43.11929025,
       -43.61969594, -44.04421816, -44.39189813, -44.66191082,
       -44.8535673 , -44.96631676, -44.99974837, -44.95359279,
       -44.8277235 , -44.62215784, -44.33705779, -43.97273045])
>>> _.dtype
dtype('float64')

Итак, вы получаете кучу отрицательных чисел, но возведение их в степень 2.2 даст сложное число:

>>> (-43.97273045)**2.2
(3333.966245482375+2422.2682642773098j)
>>> (-3.95030853e-07)**2.2
(6.6152442046857145e-15+4.806256247845179e-15j)

Однако данные тип вашего массива - float64, и поэтому он не может быть повышен до степени, которая приводит к комплексным числам:

>>> np.float64(-3.95030853e-07)**2.2
__main__:1: RuntimeWarning: invalid value encountered in double_scalars
nan

Таким образом, все полномочия для отрицательных чисел становятся NaN.

Вы можете вычислить нечетные корни отрицательных чисел (по сути, вы вычисляете (thing ** 11) ** (1/5)) с помощью этого метода .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...