我应该使用scipy.pi,numpy.pi还是math.pi?

Dou*_*ple 131 python pi numpy scipy

在使用SciPy的和NumPy的,我应该用一个项目scipy.pi,numpy.pimath.pi

Bre*_*arn 192

>>> import math
>>> import numpy as np
>>> import scipy
>>> math.pi == np.pi == scipy.pi
True
Run Code Online (Sandbox Code Playgroud)

所以没关系,它们都是一样的价值.

所有三个模块提供pi值的唯一原因是,如果您只使用三个模块中的一个,则可以方便地访问pi而无需导入另一个模块.他们没有为pi提供不同的价值观.

  • 在所有其他条件相同的情况下,我会使用`math.pi`,因为它在标准库中,如果模块不依赖于`numpy`或`scipy`否则 - 但正如你所说,在任何模块中使用pi你开始导入因为它们都是相同的值. (14认同)
  • 如果你已经在使用numpy使用`np.pi`,但是当它在'math`中导入NumPy只是为了'pi`是没有意义的. (3认同)

jba*_*bay 42

需要注意的一点是,当然,并非所有的库都会对pi使用相同的含义,因此了解您正在使用的内容永远不会受到伤害.例如,符号数学库Sympy对pi的表示与数学和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
Run Code Online (Sandbox Code Playgroud)

  • sympy是完全pi,象征性地表示,用于进行符号数学.其他是进行浮点数学的浮点近似. (18认同)
  • sympy Pi不存储为常量/浮点数,它是包含常量的对象 (9认同)
  • `math.pi == float(sympy.pi)` 返回 `True` (3认同)

cot*_*ail 5

如果我们看它的源代码scipy.pi正是math.pi;事实上,它被定义为

import math as _math
pi = _math.pi
Run Code Online (Sandbox Code Playgroud)

在他们的源代码中,math.pi定义等于3.14159265358979323846并被numpy.pi定义为等于; 两者都远高于 Python 中浮点数的 15 位精度,因此使用哪一个并不重要。3.141592653589793238462643383279502884

也就是说,如果您尚未使用 numpy 或 scipy,则导入它们只是为了np.piscipy.pi会添加不必要的依赖项,而math是 Python 标准库,因此不存在依赖项问题。例如,对于pipython 中的张量流代码,可以使用tf.constant(math.pi).