在一个使用SciPy和NumPy的项目中,什么时候应该使用scipy.pi vs numpy.pi vs仅仅使用math.pi?这些价值观之间有区别吗?
scipy.pi
numpy.pi
math.pi
dldeef671#
>>> import math >>> import numpy as np >>> import scipy >>> math.pi == np.pi == scipy.pi True
所以没关系,它们都是相同的值。所有三个模块都提供pi值的唯一原因是,如果您只使用三个模块中的一个,则可以方便地访问pi,而无需导入另一个模块。他们没有提供不同的π值。
pi
qni6mghb2#
需要注意的一点是,当然,并不是所有的库都对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
ctzwtxfj3#
如果我们看它的源代码,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中tensorflow代码中的pi,可以使用tf.constant(math.pi)。
3.14159265358979323846
3.141592653589793238462643383279502884
np.pi
math
tf.constant(math.pi)
3条答案
按热度按时间dldeef671#
所以没关系,它们都是相同的值。
所有三个模块都提供
pi
值的唯一原因是,如果您只使用三个模块中的一个,则可以方便地访问pi,而无需导入另一个模块。他们没有提供不同的π值。qni6mghb2#
需要注意的一点是,当然,并不是所有的库都对pi使用相同的含义,所以知道你使用的是什么永远不会有坏处。例如,符号数学库Sympy对pi的表示与math和numpy不同:
ctzwtxfj3#
如果我们看它的源代码,
scipy.pi
就是math.pi
;事实上,它被定义为在它们的源代码中,
math.pi
被定义为等于3.14159265358979323846
,numpy.pi
被定义为等于3.141592653589793238462643383279502884
;这两个函数的精度都远远高于Python中浮点数的15位精度,所以你使用哪一个并不重要。也就是说,如果你还没有使用numpy或scipy,只为
np.pi
或scipy.pi
导入它们会增加不必要的依赖性,而math
是一个Python标准库,所以没有依赖性问题。例如,对于python中tensorflow代码中的pi
,可以使用tf.constant(math.pi)
。