Python中定义了黄金比例吗?
有没有办法在标准的Python模块中获取黄金比例phi
?我知道在math
模块里有e
和pi
,但我可能错过了哪里定义了phi
。
2 个回答
5
标准库里没有定义这个。不过,既然你已经在使用math库了,phi可以用和pi一样的方法来计算:
>>> import math
>>> pi = 4 * math.atan(1)
>>> pi
3.141592653589793
>>> pi = math.acos(-1)
>>> pi
3.141592653589793
>>> math.pi
3.141592653589793
>>> phi = ( 1 + math.sqrt(5) ) / 2
>>> phi
1.618033988749895
至于math库里有pi和e,却没有phi,可能是因为没人提过这个需求。
Python的math文档里说math.pi是“数学常数π = 3.141592...,精度可用”。不过,你可以通过计算1的反正切的四倍来得到大致相同的结果:pi = 4 * math.atan(1)
,或者pi = math.acos(-1)
:
>>> math.pi == math.acos(-1) == 4 * math.atan(1)
True
同样的道理也适用于phi,虽然它没有直接作为math.phi
提供,但你可以用常规公式来找到一个接近的值:phi = ( 1 + math.sqrt(5) ) / 2
。
一些定义或提供“黄金比例”快捷方式的库有:
Scipy
Scipy在导入时计算一个静态值,使用标准的数学包,这和你自己定义是一样的(特别是在cpython中,两者都会在编译时计算):
import math as _math
golden = golden_ratio = (1 + _math.sqrt(5)) / 2
print(golden)
MpMath
Mpmath在调用时根据提供的精度计算代数公式:
import mpmath
print(mpmath.mp.phi)
Sympy
最接近黄金比例定义的就是sympy的单例GoldenRatio,它使用的是在调用时计算的mpmath浮点数(mpf):
import sympy
print(float(sympy.S.GoldenRatio))
Sage
Sage Math更进一步,允许你用多种不同的方法计算phi。
86
scipy.constants
这个库里把黄金比例定义为 scipy.constants.golden
。在标准库里没有这个定义,可能是因为这个比例很简单,大家都可以自己定义。
golden = (1 + 5 ** 0.5) / 2