我有一个问题是要在寻根算法中使用一个有效的函数。我需要创建一个对标签进行三重求和的函数,其中包含对一对列表的三重求和。我已经尝试了几种实现,例如使用嵌套列表、字典、将内部三重求和拆分为两个双求和(带有中间列表)、使用 itertools.izip() 将“m”和“n”字典/列表分开一起检查 R 和 E,可能还有一些我忘记了。
这个想法是我需要能够区分其他函数的标签,所以我需要一种有效的方法来存储、访问和汇总这些数字集。
现在,这个函数是迭代的一部分,所以第一次,这些列表大部分是空的。然后我需要对电子词典中的每个值使用寻根算法(非常简单)。使用根查找算法(取决于此函数)后,列表将重新填充其解决方案。这意味着在第二次迭代中,每个列表将包含大约 1000 个数字。之后,rootfinding 再次与这个新函数一起使用,在每个列表中给出(重新组合后)1000 个新数字。
显然,如果在第一次迭代中这个寻根已经花费了几分钟,我就有问题了。我对第一次迭代有一个特定的实现(由于列表内容中的所有空/只有一个值,它减少到标签上的 3 个循环),它可以在两秒内找到所有这些根。
我怎样才能有效地进行汇总,同时仍然能够区分各种列表?
提前致谢
注意:这段代码不是我最漂亮的尝试,但它是我想要完成的最清楚的。
E = {}
R = {}
for i in labels:
E[i] = {'m':[i], 'n':[]} #the label happens to be the value that's in here
E[-i] = {'m':[], 'n':[-i]}
R[i] = {'m':[1], 'n':[]}
R[-i] = {'m':[], 'n':[1]}
def function(A, En):
temp = 0
for a in E:
if (not(ACTIVATE) or a != A):
for b in E:
for c in E:
if ( not(ACTIVATE) or b != c):
for i in xrange(len(R[a]['n'])):
for j in xrange(len(R[b]['m'])):
for k in xrange(len(R[c]['m'])):
temp += R[a]['n'][i]*R[b]['m'][j]*R[c]['m'][k]/(En - (-E[a]['n'][i] + E[b]['m'][j] + E[c]['m'][k]))
for i in xrange(len(R[a]['m'])):
for j in xrange(len(R[b]['n'])):
for k in xrange(len(R[c]['n'])):
temp += R[a]['m'][i]*R[b]['n'][j]*R[c]['n'][k]/(En + (E[a]['m'][i] - E[b]['n'][j] - E[c]['n'][k]))
return .5*temp