我目前正在研究一个程序来测试理想的角度值来构造一些东西。现在我陷入了一个嵌套的循环,我将在下面附上。虽然理想的是它会计算每个' a'到9000,如果值设置如下,它已经几乎永远。有没有办法加快这个嵌套循环?或者我可以以某种方式为python分配更多的资源?
for a1 in xrange(15, 91):
for a2 in xrange(15, 91):
for a3 in xrange(15, 91):
for a4 in xrange(15, 91):
for a5 in xrange(15, 91):
for ite in xrange(1, 1000):
ok = mathmatvec(a1, a2, a3, a4, a5, ite)
if ok == 1:
v[0] = a1
v[1] = a2
.
.
答案 0 :(得分:1)
itertools.product()函数将大大加快嵌套的for循环。
也就是说,运行时间很可能由对 mathmatvec()的调用总数决定。
答案 1 :(得分:0)
您可以尝试将customer: {
data: { type: 'customer', id: '1' },
links: {
related: '/customers/1'
}
}
循环转换为for
循环,因为后者不会创建任何迭代器,所以应该更快。所以而不是:
while
写:
for a1 in xrange(15, 91):
或尝试使用PyPy。
答案 2 :(得分:0)
解决方案:使用其他算法。
就像现在一样,你执行最里面的循环999 *(76 ** 5)== 2,532,989,850,624次。这可能太多了,除非最里面的循环计算是微不足道的。
你说你想要测试理想的角度值以构建一些东西。"如果你可以正式化什么"理想"意味着,您可以使用优化算法将您想要的内容归零。如果您向我们提供有关您正在搜索的内容的更多详细信息,我们可能会告诉您更好的Python例程或算法。
如果我理解正确,mathmatvec()
只接受值0和1,并且您希望为a1,a2,a3,a4
等找到15 <= a1 <= 90
的值,为{{找到ite
的值1}}使1 <= ite <= 999
等于1,mathmatvec(a1, a2, a3, a4, ite)
尽可能小。
您可以使用函数
使其成为多维最小化问题ite
然后def func(a1, a2, a3, a4, ite):
return ite - 1000 * mathmatvec(a1, a2, a3, a4, ite)
会为func()
返回一个正数,为mathmatvec() == 0
返回一个正数,当mathmatvec() == 1
最小化时,负值会被最小化。
取决于&#34;顺畅&#34;你的函数ite
,它是如何连接的,它的适应性格局,scipy.optimize中的最小化例程之一可以很好地解决你的问题。 scipy.optimize.differential_evolution() function看起来特别有趣。