gpt4 book ai didi

python - Python 中的求幂 - 我应该更喜欢 ** 运算符而不是 math.pow 和 math.sqrt 吗?

转载 作者:IT老高 更新时间:2023-10-28 20:25:45 26 4
gpt4 key购买 nike

在我的领域中,将一些数字平方,将它们一起运算,然后取结果的平方根是很常见的。例如,这是在勾股定理和 RMS 计算中完成的。

在numpy中,我做了以下事情:

result = numpy.sqrt(numpy.sum(numpy.pow(some_vector, 2)))

在纯 python 中会出现这样的情况:

result = math.sqrt(math.pow(A, 2) + math.pow(B,2)) # example with two dimensions.

但是,我一直在使用这种纯 python 形式,因为我发现它更紧凑、独立于导入并且看似等效:

result = (A**2 + B**2)**0.5   # two dimensions
result = (A**2 + B**2 + C**2 + D**2)**0.5

我听说有些人认为 ** 运算符有点像 hack,并且通过 0.5 取幂来平方数字不太可读。但我想问的是:

“是否有任何计算理由更喜欢前两种选择而不是第三种选择?”

感谢阅读!

最佳答案

math.sqrt 是平方根的 C 实现,因此不同于使用实现 Python 内置 pow** 运算符> 功能。因此,使用 math.sqrt 实际上给出了与使用 ** 运算符不同的答案,并且确实有一个计算原因更喜欢 numpymath 模块实现超过内置。具体来说, sqrt 函数可能以最有效的方式实现,而 ** 在大量基数和指数上运行,并且可能未针对平方根的特定情况进行优化。另一方面,内置的 pow 函数可以处理一些额外的情况,例如“复数、无界整数幂和模幂运算”。

See this Stack Overflow question for more information on the difference between ** and math.sqrt.

就哪个更“Pythonic”而言,我认为我们需要讨论这个词的定义。来自 the official Python glossary ,它指出如果一段代码或想法“严格遵循 Python 语言的最常见习语,而不是使用其他语言共有的概念来实现代码”,那么它就是 Pythonic。在我能想到的每一种其他语言中,都有一些具有基本平方根函数的数学模块。但是,有些语言缺少像 ** 这样的幂运算符,例如C++。所以 ** 可能更 Pythonic,但客观上是否更好取决于用例。

关于python - Python 中的求幂 - 我应该更喜欢 ** 运算符而不是 math.pow 和 math.sqrt 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18965524/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com