我正在构建一个函数,其中包含许多循环和条件。 函数的输入是列表的元素。
我希望函数生成结果,以便nex时间不需要运行那些循环。真正的代码非常大,所以我粘贴主线如下,这是真实代码的玩具模型:
a=[1,2,3,4,5,6,7]
def ff(x):
b=0
for i in range(10000):
for k in range(10000):
if k/2 >20:
for j in range(1000):
if j**2-j>1:
b += a[x]^2+a[x]
return b
ff(2)
所以,实际上ff的结果应该很简单,但是由于循环和条件,它的运行速度非常慢。每次调用ff时我都不想遍历循环。
更像是函数是tensorflow中的张量,而index是feed值。首先构建结构,然后可以使用不同的feed值执行。也许我想要的是符号计算。
有没有办法让我可以将结果存储为结构,下次我只需输入索引的值。
我不能简单地提供a的值,因为a可以是其他形状。
答案 0 :(得分:1)
您的代码等同于(如果您将开始分析每个循环实际在做什么......):
def ff(x):
return 995900780000 * (a[x]^2+a[x])
此代码应该非常快速运行...
答案 1 :(得分:0)
条件$(document).ready(function() {
var self = {};
$('div').on('mousedown', function(e) {
self.panStartX = e.pageX;
self.panStartY = e.pageY;
self.mouseDown = true;
self.pageTop = parseInt($(this).css('top'), false) || 20;
self.pageLeft = parseInt($(this).css('left'), false) || 10;
}).on('mousemove', function(e) {
if (self.mouseDown) {
var pageTop = self.pageTop;
var pageLeft = self.pageLeft;
self.panEndX = e.pageX;
self.panEndY = e.pageY;
if (self.panStartY > self.panEndY) {
self.panTop = self.panEndY - self.panStartY;
pageTop+= self.panTop;
$(this).css({ top: pageTop });
} else {
// Down
self.panTop = self.panStartY - self.panEndY;
pageTop-= self.panTop;
if (pageTop > 42) pageTop = 42;
$(this).css({ top: pageTop });
}
}
}).on('mouseup', function(e) {
self.mouseDown = false;
});
可以重新设置为k/2 >20
;所以不是从0开始k循环,而是从41开始并消除该条件。同样,条件k > 40
意味着您只对j**2 - j > 1
感兴趣,因为其中一个解决方案小于0(并且您对这些值不感兴趣而另一个约为1.6且第一个整数大于2)。所以从2开始j循环并消除该条件。最后,你的b值不依赖于i,k或j,所以制作rhs 1.你现在有了
j >= 2
j循环将运行1000 - 2 = 998次; k将运行10000 - 41 = 9959次,我将运行10000次。 b增加的总次数是def ff(x):
b=0
for i in range(10000):
for k in range(41, 10000):
for j in range(2, 1000):
b += 1
return b
= 99390820000.这是你将rhs(998*9959*10000
)加在一起的次数...除了不同的值之外,是什么@alfasin指出:你的循环有效地添加rhs 99390820000次,因此结果将是a[x]**2 + a[x]
,现在你永远不必运行循环。您的整个功能简化为:
99390820000*(a[x]**2 + a[x])
在嵌套循环中添加内容的“结构”是将某个东西乘以每个循环运行次数的乘积。所以,如果你有
def ff(x):
return 99390820000*(a[x]**2 + a[x])
b = 0
for i in range(6):
for j in range(7):
b += 1
的值为b
...答案(一如既往;-))为42.如果您要将6*7
添加到f(x)
那时候答案是b
。