Math 用Python编写简单数学计算的最佳实践

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

我需要在Python2.7中执行简单的数学计算,包括和、减、除、乘、数字列表上的和等

我想写优雅、防弹、高效的代码,但我必须承认我被几件事弄糊涂了,例如:

  • 如果我的等式中有
    1/(N-1)*x
    ,我应该只编码
    1/(N-1)*x
    还是
    1.0/(N-1)*x
    1.0/(N-1.0)*x
    或者这些的任何其他组合
  • 对于分区,我是否应该使用
    /
    /
    与来自未来的
    导入分区
  • 诸如“使用
    math.fsum()
    串联浮点列表”之类的实践有哪些
  • 我应该假设输入的数字是浮点数还是进行转换只是为了以防万一(可能会导致许多
    float(x)
    操作的效率下降)
那么,用Python编写简单数学计算代码的最佳实践是什么呢

  • 优雅的/蟒蛇式的
  • 高效,
  • 对于输入数据的确切数量类型(浮点与整数)中的不确定性等问题,防弹措施是什么
  • 如果使用Python2.7,始终使用来自未来导入部门的
    。它消除了很多混乱和错误

    有了它,您就不必担心除法是否是浮点,
    /
    将始终是浮点,
    /
    将始终是整数

  • 您应该使用
    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