回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>下面的for循环用于为15 varuabel创建所有可能的权重组合,但是,我只需要总变量=1的组合,但是,循环太大了,它运行了11个小时,仍然没有完成,因此代码可以在循环后执行行,并获得总和=1的组合,有没有办法在循环中设置条件</p>
<pre><code>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]
</code></pre>