我有一个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])