cost=0
for i in range(12):
cost=cost+math.pow(float(float(q[i])-float(w[i])),2)
cost=(math.sqrt(cost))
更快的替代品吗?我需要改进我的整个代码,以便提高每个语句的性能。
感谢你
答案 0 :(得分:2)
除了已经制作的(和我订阅的)一般优化备注之外, 是一种更“优化”的方式来做你想要的:你操纵值数组并组合他们在数学上。这是非常有用且广泛使用的NumPy package!
的工作您将如何做到这一点:
q_array = numpy.array(q, dtype=float)
w_array = numpy.array(w, dtype=float)
cost = math.sqrt(((q_array-w_array)**2).sum())
(如果您的数组q
和w
已包含浮点数,则可以移除dtype=float
。)
这几乎和它可以获得的速度一样快,因为NumPy的操作针对数组进行了优化。它也比循环更易读,因为它既简单又短。
答案 1 :(得分:0)
只是一个提示,但通常会在功能甚至更高级别评估代码时实现真正的性能提升。
在良好的评估过程中,您可能会发现整个代码块被丢弃或重写以简化过程。
答案 2 :(得分:0)
在您清理了狡猾且不易读的代码之后,分析器非常有用。无论是运行一次还是运行数次,你都不应该编写类似的代码。
你为什么要float(q[i])
和float(w[i])
? q
和`w'的元素是什么类型?
如果x和y是浮点数,那么x - y
也将是一个浮点数,因此已经有3次浮点数出现了。
调用math.pow()而不是使用**运算符会带来“math”和“pow”上查找的开销。
Etc等
查看以下代码是否提供相同的答案,并且读取更好且更快:
costsq = 0.0
for i in xrange(12):
costsq += (q[i] - w[i]) ** 2
cost = math.sqrt(costsq)
在对其进行测试并了解更改原因后,您可以将课程应用于其他Python代码。然后,如果您有更多的数组或矩阵工作要做,请考虑使用numpy
。
答案 3 :(得分:0)
假设q和w包含数字,则不需要进行浮点数转换,否则您应该更早地将列表转换为可用的表示形式(并与计算分开)
鉴于您的函数似乎仅在执行以下操作:
"nodemon --exec 'yarn build-langs'"
也许这种表格执行得更快。