(12)或Python 3中任何其他数字的第四个根

(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=

我正在尝试为幂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=        # 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        ]
>>>