我正在构建一个函数,其中包含许多循环和条件。 函数的输入是一个列表元素。在
我希望函数生成结果,这样下一次我不需要运行这些循环。实际代码非常大,因此我将主线粘贴如下,这是真实代码的玩具模型:
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值。首先构建结构,然后可以使用不同的馈入值执行。也许我想要的是符号计算。在
有没有一种方法可以将结果存储为一个结构,下次我只需输入索引的值。在
我不能简单地输入a的值,因为a可以是其他形状。在
您的代码相当于(如果您要开始分析每个循环实际在做什么…):
这段代码应该运行得非常快。。。在
条件
k/2 >20
可以重述为k > 40
;因此,与其从0开始k循环,不如从41开始并消除该条件。同样,条件j**2 - j > 1
意味着您只对j >= 2
感兴趣,因为其中一个解小于0(而您对这些值不感兴趣,另一个大约是1.6,第一个大于该值的整数是2)。所以从2开始j循环并消除这个条件。最后,b值不依赖于i,k或j,所以将rhs设为1。你现在有了j循环将运行1000-2=998次;k将运行10000-41=9959次,而我将运行10000次。b将递增的总次数是
^{pr2}$998*9959*10000
=99390820000。这就是您将把rhs(a[x]**2 + a[x]
)加在一起的次数……除了一个不同的值,这就是@alfasin指出的:您的循环有效地添加了rhs 99390820000次,所以结果是99390820000*(a[x]**2 + a[x])
,现在您再也不用运行循环了。您的整个功能可简化为:在嵌套循环中添加内容的“结构”是将这些内容乘以每个循环运行次数的乘积。所以如果你有
b
的值是6*7
,答案(一如既往;-)是42。如果每次都将f(x)
添加到b
中,那么答案将是42*f(x)
。在相关问题 更多 >
编程相关推荐