如何将索引设置为变量?

2024-04-25 06:54:53 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我希望函数生成结果,这样下一次我不需要运行这些循环。实际代码非常大,因此我将主线粘贴如下,这是真实代码的玩具模型:

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可以是其他形状。在


Tags: 函数代码in模型元素列表forif
2条回答

您的代码相当于(如果您要开始分析每个循环实际在做什么…):

def ff(x):
    return 995900780000 * (a[x]^2+a[x])

这段代码应该运行得非常快。。。在

条件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。你现在有了

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

j循环将运行1000-2=998次;k将运行10000-41=9959次,而我将运行10000次。b将递增的总次数是998*9959*10000=99390820000。这就是您将把rhs(a[x]**2 + a[x])加在一起的次数……除了一个不同的值,这就是@alfasin指出的:您的循环有效地添加了rhs 99390820000次,所以结果是99390820000*(a[x]**2 + a[x]),现在您再也不用运行循环了。您的整个功能可简化为:

^{pr2}$

在嵌套循环中添加内容的“结构”是将这些内容乘以每个循环运行次数的乘积。所以如果你有

b = 0
for i in range(6):
  for j in range(7):
    b += 1

b的值是6*7,答案(一如既往;-)是42。如果每次都将f(x)添加到b中,那么答案将是42*f(x)。在

相关问题 更多 >