N-ный нечетный корень, включая отрицательные значения - PullRequest
0 голосов
/ 23 мая 2018

Я хочу вычислить n-й нечетный корень некоторых чисел в python.Numpy как функция кубического корня.Используя эту функцию, я могу вычислить x ^ (1/3).

x = np.linspace(-100,100,100)
np.cbrt(x)
>>> array([-4.64158883, -4.26859722, -3.81571414, -3.21829795, -2.23144317,
    2.23144317,  3.21829795,  3.81571414,  4.26859722,  4.64158883])

Однако, если я хочу вычислить то же самое для других нечетных корней k прямо, я несколько застрял.Я не могу использовать np.power напрямую, даже для вычисления корня куба:

np.power(x,1./3)
>>> array([       nan,        nan,        nan,        nan,        nan,
   2.23144317, 3.21829795, 3.81571414, 4.26859722, 4.64158883])

(-100.)**(1./3)
>>> ValueError: negative number cannot be raised to a fractional power

Я мог бы вычислить k-й нечетный корень для абсолютных значений x и затем соответствующим образом изменить знак для отрицательных элементов.в х, но мне интересно, если есть более простой путь.Вот мое текущее решение:

def kth_root(x,k):
    if k % 2 != 0:
        res = np.power(np.abs(x),1./k)
        return res*np.sign(x)
    else:
        return np.power(np.abs(x),1./k)

kth_root(x,3)
>>> array([-4.64158883, -4.26859722, -3.81571414, -3.21829795, -2.23144317,
    2.23144317,  3.21829795,  3.81571414,  4.26859722,  4.64158883])

1 Ответ

0 голосов
/ 25 мая 2018

Я собираюсь ответить на свой вопрос своим текущим решением.Это не означает, что не существует более простого или быстрого метода.

def kth_root(x,k):
    if k % 2 != 0:
        res = np.power(np.abs(x),1./k)
        return res*np.sign(x)
    else:
        return np.power(np.abs(x),1./k)


x = np.linspace(-100,100,100)
kth_root(x,3)
>>> array([-4.64158883, -4.26859722, -3.81571414, -3.21829795, -2.23144317,
2.23144317,  3.21829795,  3.81571414,  4.26859722,  4.64158883])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...