Math 用Python编写简单数学计算的最佳实践
我需要在Python2.7中执行简单的数学计算,包括和、减、除、乘、数字列表上的和等 我想写优雅、防弹、高效的代码,但我必须承认我被几件事弄糊涂了,例如:Math 用Python编写简单数学计算的最佳实践,math,coding-style,python,python-2.7,Math,Coding Style,Python,Python 2.7,我需要在Python2.7中执行简单的数学计算,包括和、减、除、乘、数字列表上的和等 我想写优雅、防弹、高效的代码,但我必须承认我被几件事弄糊涂了,例如: 如果我的等式中有1/(N-1)*x,我应该只编码1/(N-1)*x还是1.0/(N-1)*x,1.0/(N-1.0)*x或者这些的任何其他组合 对于分区,我是否应该使用/或/与来自未来的导入分区 诸如“使用math.fsum()串联浮点列表”之类的实践有哪些 我应该假设输入的数字是浮点数还是进行转换只是为了以防万一(可能会导致许多float
- 如果我的等式中有
,我应该只编码1/(N-1)*x
还是1/(N-1)*x
,1.0/(N-1)*x
或者这些的任何其他组合1.0/(N-1.0)*x
- 对于分区,我是否应该使用
或/
与来自未来的/
导入分区
- 诸如“使用
串联浮点列表”之类的实践有哪些math.fsum()
- 我应该假设输入的数字是浮点数还是进行转换只是为了以防万一(可能会导致许多
操作的效率下降)李>float(x)
。它消除了很多混乱和错误
有了它,您就不必担心除法是否是浮点,/
将始终是浮点,/
将始终是整数
float()
转换输入。你只会做一次,而且不会对性能造成太大影响
sum(li,0.0)
,但如果需要精度,请使用专门为此创建的math.fsum
1/((N-1)*x)
还是(1/(N-1))*x
?在第一种情况下,我将把它写成1/(x*(N-1))
,在第二种情况下,我将把它写成x/(N-1)
。两者都采用3.x样式划分
同样,如果你想要一些真正的性能,看看NUMPY。
如果你想在Python中使用数字代码,你应该考虑PyPy。Numpy和scipy便于处理数组,如果使用它们提供的线性代数算法,它们会提供良好的性能。但是,如果您的数字操作是纯Python代码,PyPy可以显著提高性能。我见过20倍以上的加速。当你使用PyPy时,写数学表达式的最好方法是最简单的方法。它将比您所能做的更好地优化您的代码,因此使其尽可能简单易读。
我只需要使用x/(N-1.0)
-一个浮点数就足以污染所有内容,并且减少了一个无用的操作(*1.0
)。你永远不会用/
进行非整数除法。实际上我指的是(1/(N-1))*x
。我没有把它写成x/(N-1)
,因为它是某个更大方程的推广,其中x
是更复杂的东西,这样写更清楚;-)+1用于numpy
。如果数学是你选择的毒药,那么也安装scipy
和matplotlib
。