Python 有更快的选择吗?

Python 有更快的选择吗?,python,performance,Python,Performance,有更快的替代方案吗?我需要改进我的整个代码,以便提高每个语句的性能 感谢你只是一个提示,但通常当你在一个函数甚至更高的级别上评估代码时,真正的性能改进就会出现 在一个良好的评估过程中,您可能会发现整个代码块被丢弃或重写以简化过程。除了已经说过(我也同意)的一般优化注释之外,还有一种更“优化”的方法来做您想要做的事情:您操作值数组并以数学方式组合它们。这是一个非常有用和广泛使用的工作 以下是您将如何做到这一点: cost=0 for i in range(12): cost=cost+ma

有更快的替代方案吗?我需要改进我的整个代码,以便提高每个语句的性能


感谢你

只是一个提示,但通常当你在一个函数甚至更高的级别上评估代码时,真正的性能改进就会出现


在一个良好的评估过程中,您可能会发现整个代码块被丢弃或重写以简化过程。

除了已经说过(我也同意)的一般优化注释之外,还有一种更“优化”的方法来做您想要做的事情:您操作值数组并以数学方式组合它们。这是一个非常有用和广泛使用的工作

以下是您将如何做到这一点:

cost=0
for i in range(12):
    cost=cost+math.pow(float(float(q[i])-float(w[i])),2)
cost=(math.sqrt(cost))
(如果数组
q
w
已包含浮点,则可以删除
dtype=float


这几乎是最快的速度,因为NumPy的操作针对阵列进行了优化。它也比循环易读得多,因为它既简单又短。

在清理了粗糙但不太易读的代码后,探查器非常有用。无论是运行一次还是无数次,都不应该编写这样的代码

你为什么要做浮动(q[i])和浮动(w[i])?
q
和'w'的元素是什么类型的

如果x和y是浮点数,那么
x-y
也将是浮点数,因此float()已经有3次明显的重复出现

调用math.pow()而不是使用**运算符会带来查找“math”和“pow”的开销

等等

查看以下代码是否给出了相同的答案,阅读效果是否更好,速度是否更快:

q_array = numpy.array(q, dtype=float)
w_array = numpy.array(w, dtype=float)
cost = math.sqrt(((q_array-w_array)**2).sum())

在您测试了它并理解了为什么要进行更改之后,您可以将课程应用到其他Python代码中。然后,如果你有更多的数组或矩阵工作要做,考虑使用<代码> NUMPY < /COD> .< /P> < P>假设q和w包含数字,则转换为浮点是不必要的,否则你应该更早地将列表转换为可用的表示(和计算分开)

鉴于您的功能似乎只做了与此等效的工作:

costsq = 0.0
for i in xrange(12):
    costsq += (q[i] - w[i]) ** 2
cost = math.sqrt(costsq)

这个表单可能执行得更快。

而不是尝试逐个改进每个语句,您应该考虑运行一个分析器来找出哪些语句占用的时间最多。然后,改进代码的这一部分。否则,您将在不合理的优化上花费大量时间。在我出生的地方,人们都很愚蠢:我认为Python分析器在函数/方法级别工作,而不是在语句级别。list的元素是I字符串格式,因此必须使用float Iguess@kaushik考虑将字符串转换为输入上的浮点。(例如)
q=map(float,q)
——尤其是在多个计算中使用它们时。
cost = sum( (qi-wi)**2 for qi,wi in zip(q[:12],w) ) ** 0.5