Numpy - возводите отрицательные элементы в нецелую степень - PullRequest
0 голосов
/ 26 мая 2019
import numpy as np
from scipy import stats

np.random.seed(42)
data = sorted(stats.norm.rvs(size=1000))

Я хочу поднять data до степени 3/4.

Я пытался:

np.power(data, 3/4) # doesn't work because power is not integer
np.float_power(data, 3/4) # returns nan for negative elements
scipy.linalg.fractional_matrix_power(data, 3/4) # doesn't work because data is 1D array, not matrix

Как я могу сделать это, используя numpy?

Ответы [ 2 ]

1 голос
/ 26 мая 2019

Нет необходимости называть, скажем, np.power явно; выполнив ваши вычисления перед использованием sorted (или даже вместо np.sort), мы можем просто использовать операторы:

np.sort(data ** (3 / 4))

Обязательно, это даст nan значений, потому что корень отрицательного числа будет сложным, и ваш массив может обрабатывать только floats.

Поэтому решение состоит в том, чтобы привести его к типу dtype np.complex:

data = np.sort(stats.norm.rvs(size=10).astype(np.complex) ** (3 / 4))
print(data)

Выход:

[-1.18840462+1.18840462j -0.10707968+0.10707968j -0.09787584+0.09787584j
 -0.05992208+0.05992208j  0.10880864+0.j          0.1484953 +0.j
  0.45161317+0.j          0.78783041+0.j          0.79189574+0.j
  0.93656538+0.j        ]
1 голос
/ 26 мая 2019
np.power(data, 3./4)

приведет к плаванию для власти.Так как 3/4 вернет int.

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