Повышение массивов до дробного индекса приводит к получению NaN?

#python #numpy #nan

Вопрос:

У меня есть массив, k, как показано в моем MWE. Я хочу поднять этот массив до степени 3/2, но когда я это делаю, возникает ошибка в кавычках.

 import numpy as np
N = 2**15
dx = 0.1
k = (2 * np.pi / (N * dx)) * np.r_[0:N / 2, 0, -N / 2   1:0][None, :]
kpower = k**(3/2)
print(kpower)
 

array([[0. , 0.0018999 , 0.00537372, …, nan, nan,
nan]])

Почему это происходит? Я пробовал использовать np.power, а также

scipy.linalg импорт fractional_matrix_power

В чем здесь дело, поскольку массив реален и содержит только целые числа.

Комментарии:

1. Можете ли вы привести нам полностью рабочий пример? Что такое N и dx ?

2. Извините, отредактировано! долгий день

Ответ №1:

Вы должны привести записи вашего массива к комплексным числам, чтобы numpy мог выполнить ваше возведение в степень:

 import numpy as np
N = 5
dx = 2
k = (2 * np.pi / (N * dx)) * np.r_[0: N / 2, 0, -N / 2   1:0][None, :]

# convert array to complex datatype
k = k.astype(np.cdouble)

kpower = k**(3/2)
print(kpower)
 

Выход:

 [[ 0.00000000e 00 0.j          4.98046397e-01 0.j
   1.40868794e 00 0.j          0.00000000e 00 0.j
  -1.68077199e-16-0.91496966j -3.23464720e-17-0.17608599j]]
 

Комментарии:

1. ооо, теперь я вижу, как это делается. Как мне принять значения abs для этого?

2. np.абсолют(kpower) дает вам абсолютные значения по элементам