我必须使用以下公式计算python中的一些数量:(我将发布一个图像,因为LaTeX语言无法识别)
其中“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上的和)
目前没有回答
相关问题 更多 >
编程相关推荐