Неожиданный результат при численном вычислении — (недопустимое значение, встречающееся в double_scalar )

#python #math #numbers #numeric

#python #математика #числа #числовое

Вопрос:

 from numpy import log as ln
z = 3
k = 2

x = 1 - ln(1   z) / ln(1   k)
y = 1/5
print("The x=", x)

Q = x**y

print(Q)
 

Результат

 The x= -0.26185950714291484
c:Users-Desktop... RuntimeWarning: invalid value 
encountered in double_scalars
  Q = x**y
nan
 

Я беспокоюсь о том, чтобы понять проблему здесь. Понятно, что я могу распечатать x , но я не могу воспользоваться этим.

Между тем, когда я пишу код как

 x = -0.26185950714291484
y = 1/5
print("The x=", x)
Q = x**y

print(Q)
 

Я получаю

 The x= -0.26185950714291484
(0.6188299348758349 0.44960626529008196j)
 

Я буквально в шоке. Я не могу понять, что происходит. Если я просто введу числа вручную, я смогу вычислить результат. Но если я выполняю их вычислительно, я получаю ошибку???

Ответ №1:

Ну, они выглядят одинаково, потому что они не совпадают с кодом:

 from numpy import log as ln
z = 3
k = 2

x = 1 - ln(1   z) / ln(1   k)
y = 1/5
print("The x=", x)

Q = x**y

print(Q)
 

у вас есть переменная ‘x’ типа <class 'numpy.float64'> , тогда как с:

 x = -0.26185950714291484
y = 1/5
print("The x=", x)
Q = x**y

print(Q)
 

переменная ‘x’ имеет тип <class 'float'> .

Затем вы применили возведение в степень со значением разных типов, а именно <введите одно значение типа ‘numpy.float64’> (т.е. ‘x’) с другим значением типа <class ‘float’> (т.е. ‘y’). Вы хотите избежать проблем, чтобы преобразовать ‘x’ в float было хорошо:

 from numpy import log as ln
z = 3
k = 2

x = 1 - ln(1   z) / ln(1   k)
y = 1/5

Q = float(x)**y

print(Q)
 

Вывод:

 (0.6188299348758349 0.44960626529008196j)