在使用 SciPy 和 NumPy 的项目中,什么时候应该使用
scipy.pi
、numpy.pi
、还是仅使用 math.pi
?这些值之间有区别吗?
>>> import math
>>> import numpy as np
>>> import scipy
>>> math.pi == np.pi == scipy.pi
True
它们都是相同的值,所以使用哪一个并不重要。
所有三个模块都提供
pi
值的唯一原因是,如果您仅使用这三个模块之一,您可以方便地访问 pi,而无需导入另一个模块。他们没有为 pi 提供不同的值。
需要注意的一件事是,当然,并非所有库都会对 pi 使用相同的含义,因此了解您正在使用的内容永远不会有什么坏处。例如,符号数学库 Sympy 对 pi 的表示与 math 和 numpy 不同:
import math
import numpy
import scipy
import sympy
print(math.pi == numpy.pi)
> True
print(math.pi == scipy.pi)
> True
print(math.pi == sympy.pi)
> False
源代码,scipy.pi
正是
math.pi
;事实上,它的定义为
import math as _math
pi = _math.pi
在他们的源代码中,math.pi
被定义等于
3.14159265358979323846
并且
numpy.pi
被定义等于
3.141592653589793238462643383279502884
;两者都远高于 Python 中浮点数的 15 位精度,因此使用哪一个并不重要。也就是说,如果您尚未使用 numpy 或 scipy,仅针对
np.pi
或
scipy.pi
导入它们会添加不必要的依赖项,而
math
是 Python 标准库,因此不存在依赖关系问题。例如,对于 python 中的张量流代码中的
pi
,可以使用
tf.constant(math.pi)
。