math - 在 Python 中编写简单数学计算的最佳实践

标签 math coding-style python python-2.7

我需要在 Python 2.7 中执行简单的数学计算,包括求和、减法、除法、乘法、数字列表的求和等。

我想编写优雅、防弹且高效的代码,但我必须承认我对几件事感到困惑,例如:

  • 如果我的等式中有 1/(N-1)*x,我应该只编码 1/(N-1)*x 还是 1.0/(N-1)*x1.0/(N-1.0)*x 或这些的任何其他组合?
  • 对于除法,我应该使用 // 还是 /from __future__ import division
  • 有哪些实践,例如“使用 math.fsum() 连接 float 列表”?
  • 我应该假设输入数字是 float 还是进行转换以防万一(可能会降低许多 float(x) 操作的效率)?

那么用 Python 编写简单数学计算代码的最佳实践是什么

  1. 优雅/Pythonic,
  2. 高效,
  3. 对诸如输入数据的确切数字类型( float 与整数)的不确定性等问题的防弹保护?

最佳答案

  1. 如果您使用 Python 2.7,总是使用from __future__ import division。它消除了很多困惑和错误。

    有了这个,你永远不必担心除法是否是 float ,/ 将始终是 float 而 // 将始终是 int。

  2. 您应该使用 float() 转换您的输入。您只需执行一次,并且不会对性能造成太大影响。

  3. 我会像这样得到 float 列表的总和:sum(li, 0.0),但如果需要精度,请使用 math.fsum这是专门为此创建的。

  4. 最后,您的最终陈述令人困惑。您是指 1/((N-1)*x) 还是 (1/(N-1))*x?在第一种情况下,我将其写为 1/(x * (N-1)),在第二种情况下,我将其写为 x/(N-1)。两者都采用 3.x 样式划分。

此外,如果您想要一些真正的性能,请查看 numpy。

关于math - 在 Python 中编写简单数学计算的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8678428/

相关文章:

c++ - 矩阵连续n个数的最大乘积

javascript - 在不同的浏览器中使用相同的数学运算得到不同的结果

python - 类与列表(访问器编码风格)

python - 如何读取csv避免索引?

python - 在 Tkinter 的 PIL 中调整图片大小

python - 在 ctypes.Structure 中使用枚举

数学编程语言

math - 将罗马数字翻译成阿拉伯数字

java - Sun (1999) 的 "Code Conventions for the Java Programming Language"是否过时?

Python 和 Django 编码风格 (PEP)