在使用SciPy和NumPy的项目中,我应该使用scipy.pi、numpy.pi还是math.pi?
scipy.pi
numpy.pi
math.pi
wfauudbj1#
>>> import math >>> import numpy as np >>> import scipy >>> math.pi == np.pi == scipy.pi True
所以没关系,它们都是相同的值。这三个模块都提供pi值的唯一原因是,如果你只使用其中一个模块,你可以方便地访问pi,而不必导入另一个模块,它们没有提供不同的pi值。
pi
x8diyxa72#
有一点需要注意,当然,并非所有的库都对pi使用相同的含义,所以知道你在使用什么也没什么坏处,例如,符号数学库Symy对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
j5fpnvbx3#
如果我们看它的源代码,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)。
3.14159265358979323846
3.141592653589793238462643383279502884
np.pi
math
tf.constant(math.pi)
3条答案
按热度按时间wfauudbj1#
所以没关系,它们都是相同的值。
这三个模块都提供
pi
值的唯一原因是,如果你只使用其中一个模块,你可以方便地访问pi,而不必导入另一个模块,它们没有提供不同的pi值。x8diyxa72#
有一点需要注意,当然,并非所有的库都对pi使用相同的含义,所以知道你在使用什么也没什么坏处,例如,符号数学库Symy对pi的表示与math和numpy不同:
j5fpnvbx3#
如果我们看它的源代码,
scipy.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)
。