(12)或Python 3中任何其他数字的第四个根
我正在尝试为幂12到4(12**4)编写一个简单的代码。 我有输出num(20736),但当我想计算时,它会将(20736)返回到其原始值(12)。我不知道如何在Python中实现这一点。。 在真正的数学中,我是通过数学短语{12}来做到这一点的 问题是如何用Python制作{12}?? 我使用的是sqrt(),但sqrt仅用于幂2(12)或Python 3中任何其他数字的第四个根,python,math,python-3.x,nth-root,Python,Math,Python 3.x,Nth Root,我正在尝试为幂12到4(12**4)编写一个简单的代码。 我有输出num(20736),但当我想计算时,它会将(20736)返回到其原始值(12)。我不知道如何在Python中实现这一点。。 在真正的数学中,我是通过数学短语{12}来做到这一点的 问题是如何用Python制作{12}?? 我使用的是sqrt(),但sqrt仅用于幂2 #!/usr/bin/env python3.3 import math def pwo(): f=12 ** 4 #f =20736 # c=
#!/usr/bin/env python3.3
import math
def pwo():
f=12 ** 4 #f =20736 #
c= # should c = 12 #
return f,c
print pwo()
或
出于科学目的(在需要高精度的情况下),可以使用numpy:
>>> def root(n, r=4):
... from numpy import roots
... return roots([1]+[0]*(r-1)+[-n])
...
>>> print(root(12))
[ -1.86120972e+00+0.j -3.05311332e-16+1.86120972j
-3.05311332e-16-1.86120972j 1.86120972e+00+0.j ]
>>>
输出可能看起来很奇怪,但它可以像使用列表一样使用。此外,上面的函数将允许您查找任何数字的任何根(我将r的默认值设置为4,因为您专门要求第四个根)。最后,numpy是一个不错的选择,因为它将返回同样满足您的方程式的复数。
20736**0.25
可能有点不准确,或者准确,我不确定。n
-x的第次根是x^(1/n)
,因此20736**(1.0/4)
。提示:n^(1/4)=(n^(1/2))^(1/2)
。或者使用n**0.25
。在数学中,12؇4
是4的第12根,而不是12的第4根。换句话说,它是4**12
的倒数,而不是12**4
的倒数。你到底想要哪一个?@DanielFisher:如果你想要精确到给定的小数位数,只需使用20736**decimal.decimal(1)/4
。@abarnert:12是12的第四个根;12*12*12*12=20736:(20736؇4=12)+1是的。有时候,最简单的解决办法是在触摸键盘之前,从数学的角度思考;)作为将来的参考:平方根:num**(1/2)立方根:num**(1/3)第n根:num**(1/n)谢谢这是真正的答案。因此,在某些情况下,这似乎不如简单的Python方法精确到查找第一个非虚正根。例如:(对不起,oneliners…将numpy导入为np
,numpy\u root=lambda n,r:float(np.real(filter)(lambda n:np.imag(n)=0和n>0,np.roots(np.double([1]+[0]*(r-1)+[-n])))[0])
,py root=lambda n,r:float(n)**(1.0/float(r))
。在我的框中,numpy_root(2,12)==1.05946309443592955
,但是py_root(2,12)==1.05946309443592953
,根据具体情况更好。我在做坏事吗?另一个numpy API会更好吗…?
import math
def f(num):
return math.sqrt(math.sqrt(num))
>>> def root(n, r=4):
... from numpy import roots
... return roots([1]+[0]*(r-1)+[-n])
...
>>> print(root(12))
[ -1.86120972e+00+0.j -3.05311332e-16+1.86120972j
-3.05311332e-16-1.86120972j 1.86120972e+00+0.j ]
>>>