Python中定义了黄金比例吗?

48 投票
2 回答
48910 浏览
提问于 2025-04-18 16:36

有没有办法在标准的Python模块中获取黄金比例phi?我知道在math模块里有epi,但我可能错过了哪里定义了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库里有pie,却没有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

撰写回答