在numpy中只从分数次幂计算实根



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

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

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之外的所有操作的实根。

您需要numpy中的cbrt函数:

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

你可以使用这样的技巧:

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

您可以使用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])

最新更新