如何将索引设置为变量?

时间:2017-10-27 01:34:47

标签: python sympy

我正在构建一个函数,其中包含许多循环和条件。 函数的输入是列表的元素。

我希望函数生成结果,以便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可以是其他形状。

2 个答案:

答案 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