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

问题描述

我有一个带有负值和正值的 numpy 数组,我试图将它提高到 1/3 的幂。对于所有负数,我得到 missing_zero = "0" df['ZIP'] = missing_zero + df['ZIP'].map(str) (我理解这是因为它涉及复根),但是,我想打印出实根而不是 Nan

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

Nan

import numpy as np x = np.linspace(-5,5,10) z = x**(1/3) 的结果是:

z

我希望 array([ nan,nan,0.82207069,1.1856311,1.40572111,1.57256466,1.70997595]) 包含不带 z 的操作的所有实根。

解决方法

您需要 numpycbrt 函数:

>>> 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))