消除Python中的forloop

2024-05-15 03:45:38 发布

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

我必须使用以下公式计算python中的一些数量:(我将发布一个图像,因为LaTeX语言无法识别)

enter image description here

其中“psi”只是digamma函数,v_j和alpha_{t,bl}{l}是浮点数,t={0,1,2},bl={0,1,2,3}和l={1,2,…,309}

现在,我已经解决了将v_j分组到一个列表中,将字母分组到嵌套字典中(顺序为:l,t,bl),用三个For循环迭代公式:

for loop in tqdm(range(500)):
logr = []
for t in range(3):
    add1 = digamma(V[t]) - digamma(sum(V))
    add2 = 0
    for b in test.columns[2:-1]:
        add2 += digamma(alphas[b][t][test.iloc[395][b]]) - digamma(sum(alphas[b][t])) 
    logrho = add1 + add2
    logr.append(logrho)
rho = np.exp(logr)
q = rho/sum(rho)

问题是,我必须迭代这些代码行数百次。所以,我正在寻找一种最终将我的问题矢量化的方法。我的第一个猜测是将“alpha字典”转换为数据帧(pd.DataFrame.from_dict()),但仍然无法摆脱for循环

有没有更好的办法来解决这个问题?也许创建一个三维数据框架

编辑

我正在努力解决的真正问题是关于方程的第二部分(让我忘记digamma函数)。α参数有3个维度:t=0,1,2;l=1,2,…,N和bl=0,1,2,3。假设我们修正了t,这样我们只在t=0,1,2上迭代。alpha参数可以在二维数据帧中表示:

bl     l1     l2     l3     ...     lN
0      a0l1   a0l2   a0l3           a0lN
1      a1l1   a1l2   a1l3           a1lN
2      ...
3      a3l1   ...                   a3lN

我不应该从每个alpha中减去列上的和,而应该只从四个类bl=0,1,2,3中的一个中减去。 如果在数据中,变量l1提供了3的结果,我应该从a3l1中减去列l1的字母之和;如果l2中的结果是0,我应该从a0l2中减去l2列的字母之和,依此类推。最后,结果之和将被求和(l上的和)


Tags: 数据函数inalphal1for字母公式

热门问题