Numpy возвращает Nans для экспоненциальной. Pure Python возвращает правильный результат - PullRequest
1 голос
/ 04 ноября 2019

Я действительно смущен этим. Может быть, кто-то может уточнить для меня результат:

import numpy as np

a = np.array([ 1.97635114,  1.72790352,  1.51046621,  1.25543557,  1.01718594,
        0.77378732,  0.53452001,  0.29627038,  0.05802074, -0.18022889,
       -0.41847852])
e = -1.377404416

a**e

производит

array([ 0.39126903, 0.47080342, 0.56661974, 0.73100461, 0.97680242, 1.42368231, 2.369756 , 5.34193942, 50.47146058, nan, nan])

[item**e for item in a]

дает мне

[0.39126902696026267, 0.4708034172873469, 0.5666197367017416, 0.7310046117775049, 0.9768024208132248, 1.4236823077174863, 2.369756002432608, 5.341939422216064, 50.47146057971127, nan, nan]

НО

-0.41847852**e

доходность

-3.3197780173988067

Почему NumPy не может рассчитать экспоненту этих двух чисел?

Ответы [ 3 ]

7 голосов
/ 04 ноября 2019

Корни отрицательных чисел не определены в действительных числах. Python дает следующее: -(0.41847852**e) из-за приоритета оператора. Попробуйте с круглыми скобками (-0.41847852)**e:

>>> (-1.247220271970189+3.0765837674262926j)

Это дает комплексное число. Вот почему NumPy вычисляет их как nan. Если вы создаете массив numpy с помощью dtype='complex', numpy также может их вычислять.

1 голос
/ 04 ноября 2019

Чистый Питон немного обманывает тебя здесь. Это не реальное число для отрицательных корней - a. См. Ниже для обхода, если вы хотите один. Он использует dtype=np.complex, чтобы превратить его в комплексное число, использует .real, чтобы изменить его на то, что выводит чистый питон.

import numpy as np

a = np.array([ 1.97635114,  1.72790352,  1.51046621,  1.25543557,  1.01718594,
        0.77378732,  0.53452001,  0.29627038,  0.05802074, -0.18022889,
       -0.41847852], dtype=np.complex)
e = -1.377404416

complexAnswer = a**e
realAnswer = complexAnswer.real
1 голос
/ 04 ноября 2019

Находясь внутри NumPy, с вашим данным массивом производятся только вычисления с реальными значениями. Помимо numpy, Python выполняет вычисления со сложными значениями.

Обратите внимание, что -0.41847852**e отличается от (-0.41847852)**e

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