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