微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决仅从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))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。