gpt4 book ai didi

python - 在 for 循环中设置条件

转载 作者:行者123 更新时间:2023-12-04 10:24:02 24 4
gpt4 key购买 nike

下面 for 循环为 15 varuabel 创建所有可能的权重组合,但是,我只需要总变量 = 1 的组合,但是,循环太大了,它运行了 11 个小时,但仍未完成,因此代码可以执行循环后的行并获得总和 = 1 的组合,有没有办法在循环内设置我的条件?

import pandas as pd, numpy, itertools


w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15 = (
list(
numpy.arange(0, 11, 1)/10
) for i in range(15)
)
comb_list = [w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15]
weights_df = pd.DataFrame(
columns = ['w1', 'w2', 'w3', 'w4', 'w5', 'w6', 'w7', 'w8', 'w9', 'w10', 'w11', 'w12', 'w13', 'w14', 'w15']
)

for weights in itertools.product(*comb_list):
weights_df.loc[len(weights_df)] = weights


weights_df.loc[:,'total_weight'] = (weights_df['w1']
+ weights_df['w2'] + weights_df['w3']
+ weights_df['w4'] + weights_df['w5']
+ weights_df['w6'] + weights_df['w7']
+ weights_df['w8'] + weights_df['w9']
+ weights_df['10'] + weights_df['w11']
+ weights_df['w12'] + weights_df['w13']
+ weights_df['w14'] + weights_df['w15'])
weights_df = weights_df[weights_df['total_weight'] == 1]

最佳答案

有 15 个列表,每个列表有 11 个(包括 0-10)元素。您正在使用所有这些的笛卡尔积。

这是您要迭代的 11^15 个项目。约 4 千亿。

当然,您可以将测试移到 for 循环中,但我认为这不足以使该脚本实用。

您还可以将循环分解为 15x 嵌套循环,每个级别都有一个过滤器;我希望这会在运行时为您带来数量级的改进。但我认为这还不够。

您需要返回并抽象地考虑问题,并找出一些不太暴力的计算方法来计算您要计算的任何内容。

关于python - 在 for 循环中设置条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60707580/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com