python - 如何加快第二个循环依赖于第一个循环的嵌套循环?
问题描述
考虑以下代码:
n = 20000
def f(i, j):
return (i+1j*j)/(i-1j*j+1) # a sample function, not necessary this form
lst = []
for i in range(n):
for j in range(i, n):
lst.append((i, j, f(i, j)))
由于循环非常大,我想对其进行矢量化或加速。阅读其他帖子,似乎itertools.product
可以加快循环,但在我的情况下,第二个循环取决于第一个,似乎我不能简单地使用它。那么如何加快速度呢?
例如,我可以使用 4 个处理器。
解决方案
一般来说,你可以这样做np.triu_indices
:
i, j = np.triu_indices(n)
np.stack([i, j, f(i, j)])
这可能会阻塞您的系统(因为i
每个j
都有 200M 个元素n = 20000
),在这种情况下您需要itertools
推荐阅读
- python - Plotly:如何使用 plotly express 显示时间序列数据的趋势线?
- c# - 实体框架/Linq 不知道反序列化对象?
- shell - hashcorp 打包器 shell 配置程序中的 sed 命令失败
- database - 如何将odoo的postgreSQL数据库恢复到谷歌云?
- node.js - 返回异步函数以表达路由器
- python - 如何正确合并数据框?
- javascript - 创建一个 For 循环来找到适当除数的总和
- regex - 如何将原始字符串传递给 Zsh 中的变量?
- google-cloud-platform - 读取 datadog.yaml 文件的权限被拒绝
- c# - WPF 模板。模板选择器没有收到项目