仅从 numpy 中的分数幂计算实根

Calculate only real roots from fractional power in numpy

我有一个带有负值和正值的 numpy 数组,我正在尝试将其提高到 1/3 的幂。我得到所有负数的 Nan(我理解是因为它涉及复根),但是,我想打印出实根而不是 Nan

有没有一种快速的 pythonic 方法来做到这一点?因为第三个根,我知道总会有一个真正的根。

import numpy as np

x = np.linspace(-5,5,10)
z = x**(1/3)

z 的结果是:

array([       nan,        nan,        nan,        nan,        nan,
       0.82207069, 1.1856311 , 1.40572111, 1.57256466, 1.70997595])

我希望 z 包含没有 nan 的运算的所有实根。

您需要 cbrt 来自 numpy 的功能:

>>> np.cbrt(x)
array([-1.70997595, -1.57256466, -1.40572111, -1.1856311 , -0.82207069,
        0.82207069,  1.1856311 ,  1.40572111,  1.57256466,  1.70997595])

您可以使用complex数据类型,然后提取真正的组件:

import numpy
x = numpy.linspace(-5, 5, 10, dtype=numpy.complex)
roots = x ** 1/3
reals = roots.real
print(reals)
array([-1.66666667+0.j, -1.2962963 +0.j, -0.92592593+0.j, -0.55555556+0.j,
       -0.18518519+0.j,  0.18518519+0.j,  0.55555556+0.j,  0.92592593+0.j,
        1.2962963 +0.j,  1.66666667+0.j])

你可以使用这样的技巧:

z = np.where(x<0, -np.abs(x)**(1/3), x**(1/3))