numpy.power для массива с отрицательными числами - PullRequest
1 голос
/ 10 апреля 2019

У меня есть массив NumPy arr = np.array([-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]).
Тогда как я могу поднять каждый элемент до (скажем) 3/5-й степени?

Когда я пытаюсь что-то вроде этого:

>>> np.float_power(arr, 3/5)
>>> arr**(3/5)

Я всегда получаю этот вывод:

array([       nan,        nan,        nan,        nan,        nan,
   0.        , 1.        , 1.16150873, 1.26782173, 1.34910253,
   1.4157205 ])

Однако x**(3/5) должен быть вычисляем для отрицательных чисел x, так как это только пятый корень из x в кубе!
Я думаю, это потому, что Python не видит 3/5 как «идеальную дробь» 3/5, а как действительное число (очень) близкое к 0,6 (например, 0,59999999999999999).

Как я могу исправить эту проблему?

1 Ответ

1 голос
/ 10 апреля 2019

Вы должны убрать знак и установить его позже:

res = np.float_power(abs(arr), 3./5)*np.sign(arr)

[-2.6265278  -2.29739671 -1.93318204 -1.51571657 -1.  0. 1. 1.51571657  1.93318204  2.29739671  2.6265278 ]

Алгоритм n-го корня возвращает только положительные значения.Я предполагаю, что реализация в Numpy похожа.

...