python - 消除 Python 中的 for 循环
问题描述
我必须使用以下公式在 python 中计算一些数量:(由于无法识别 LaTeX 语言,我将发布图像)
其中“psi”只是二伽马函数,v_j 和 alpha_{t, bl}^{l} 是浮点数,t={0, 1, 2}, bl = {0, 1, 2, 3} 和 l = {1, 2, ..., 309}。
现在我已经解决了将 v_j 分组到一个列表中并将 alpha 分组到嵌套字典中(按顺序: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 函数)。alpha 参数有 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 列的 alpha 总和;如果 l2 中的结果为 0,我应该从 a0l2 中减去 l2 列的 alpha 之和,依此类推。最后将结果的总和相加(sum over l)
解决方案
推荐阅读
- mysql - MySQL 中的 Picklist 数据排序
- google-cloud-platform - 将 nuxtjs 应用程序部署到 GCP,但它给出了服务器错误?
- javascript - 如何在函数中将变量值作为参数传递
- javascript - 如何使用 prisma 数据库中的“NOW()”更新表?
- ios - 如何快速解析不同结构的请求
- javascript - 循环前过滤数组值
- java - Java 中的 LDAP 上下文搜索不提供任何结果,即使在搜索已知存在的值时也是如此
- javascript - JS window.location 问题
- python - 如何计算字符串中包含子字符串总和的次数?
- excel - 从工作表 1 中的筛选表复制数据,并将数据粘贴到工作表 2 中现有数据最后一行正下方的行中