【问题标题】:Is there a short-hand for nth root of x in Python?在 Python 中是否有 x 的第 n 个根的简写?
【发布时间】:2013-10-15 19:32:00
【问题描述】:

简单的语法问题。

在数学中,如果我有两个数字 3 和 2,并且我希望计算 3 的 2 次方,那么不需要符号,但我将两个数字写得很小。在Python 中,此操作似乎由** 语法表示。

>>> 3**2
9

如果我想换个方向计算 9 的第二个根,那么在数学中我需要使用一个符号:

Python 中是否存在类似于** 的速记符号来实现这一点,即2<symbol>9。还是我需要使用math 模块?

【问题讨论】:

  • 知道x1/n 的幂与nthx 的根相同可能会有所帮助。
  • 确保在 Python 2 中使用 ** 1.0/n 而不是 ** 1/n,因为整数除法。
  • 一旦你看到答案是多么简单,你就会明白为什么没有专门的语法。
  • @MarkRansom - 我认识马克:虽然这是我差点删除的问题之一 - 然后离开了一两分钟 - 结果证明问题的简单性(愚蠢)导致了一些有趣的答案.
  • @MarkRansom 为我辩护,尽管马克 - 在数学中,当我们想要 9 的平方根时,我们不会写 9^(1/2) - 我认为可能存在与数学等价的句法规范。

标签: python math operators


【解决方案1】:

x 的第 n 个根是 x^(1/n),因此您可以使用 9**(1/2.0) 来找到 9 的第 2 个根。通常,您可以将 x 的第 n 个根计算为:

x**(1/float(n))

您也可以使用1.0/n 代替1/float(n)。它是必需的,以便结果是 float 而不是 int

【讨论】:

  • 在 Python 3 中,不需要将结果强制为浮点数,它会自动发生。
  • @MarkRansom 谢谢-我正在使用3.2.2,看看你的意思>>> 8**(1/3) = 2
  • 或者x**(1./n)
【解决方案2】:

你也可以使用一些对数:

x 的第 N 个根:

exp(log(x)/n)

【讨论】:

  • 对不起,这是另一种方式 - exp(log(x)/n)
【解决方案3】:

还有:x**(n**-1),与x**(1/float(n))相同但短于x**(1/float(n))

【讨论】:

  • 但是,它并不比 x**(1./n) 短,而且可能稍微不那么准确(但话又说回来,这种计算第 n 根的整个方法不是最优的)。
【解决方案4】:

如果您更喜欢以函数方式应用此操作而不是使用中缀运算符(** 符号),您可以将基数和指数作为参数传递给 pow 函数:

In [23]: (9**(0.5)) == pow(9, 0.5)
Out[23]: True

我也喜欢为this Infix hack in Python 寻找新用途,尽管它比重型解决方案更有趣。但是您可以通过执行以下操作有效地为此制作自己的个人符号:

class Infix:
    def __init__(self, function):
        self.function = function
    def __ror__(self, other):
        return Infix(lambda x, self=self, other=other: self.function(other, x))
    def __or__(self, other):
        return self.function(other)
    def __rlshift__(self, other):
        return Infix(lambda x, self=self, other=other: self.function(other, x))
    def __rshift__(self, other):
        return self.function(other)
    def __call__(self, value1, value2):
        return self.function(value1, value2)


root_of = Infix(lambda x,y: y**(1.0/x))

print 2 |root_of| 9
3.0

【讨论】:

    【解决方案5】:

    有。只是** =)

    任何 n 次根都是 1/n 的幂,所以要得到 9 的平方根,你可以使用 9**(1/2)(或 9**0.5)来得到立方根,你使用 9 ** (1/3)(我们可以' t 写一个更简单的分数),并得到第 n 个根,9 ** (1/n)

    另请注意,从 Python 3 开始,不再需要向整数添加句点以使其成为浮点数。说1/3 会按照您实际期望的方式工作,结果是0.333...,而不是零。对于 Python 的旧版本,您必须记住使用那个时期(但同时也非常想知道为什么要使用旧版本的编程语言)

    【讨论】:

      【解决方案6】:

      基本上 sqrt(9) 等价于 9^.5

      >>>9**.5
      3.0
      

      【讨论】:

        【解决方案7】:

        你应该这样做

        16**(0.5) #If you print it, you get 4, So you can use this formula.
        

        【讨论】:

        • 在 Python 2.x 上打印 1,因为 1/2 返回 0。
        • @NacibNeme - 在 3.2.2 中很好
        • 所以使用:Python 2.7.5+ (default, Sep 17 2013, 17:31:54) [GCC 4.8.1] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> 16**(0.5) 4.0 >>>
        【解决方案8】:
        def nthrootofm(a,n):
            return pow(a,(1/n))
        a=81
        n=4
        q=nthrootofm(a,n)
        print(q)
        

        pow() 函数有两个参数。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-07-27
          • 1970-01-01
          • 2019-03-21
          • 2019-01-08
          • 2019-09-17
          • 2018-01-20
          • 2015-08-31
          • 2017-06-27
          相关资源
          最近更新 更多