如何运行某些函数,直到我们得到所需的值,python

时间:2018-05-14 09:29:57

标签: python-3.x numpy for-loop if-statement

我有一个for循环,我每个月都会生成一些随机的每日值。我需要确保生成的月平均值应该等于观察到的平均值(在不同的数据框中提供)。因此,我需要运行此for循环,直到生成所需的值,然后再次运行下个月。

我有示例代码,但不知道如何运行它几次,直到获得所需的值:

for j in np.arange(1,13,1):
    # calculating monthly leanth from provided datasets 
    mlen = ((df_test[df_test.index.year==2000]).index.month==j).sum()

    # fit to my distribution
    phat = stats.exponweib.fit((df_test[df_test.index.month==j].mean(axis=1)).dropna())

    # predicting based on the fitted distribution
    esti = stats.exponweib.rvs(*phat,int(mlen))

    if esti.mean() == monthly_mean[0]

其中monthly_mean是观察到的月平均值,如下图所示,其中第一个月的第一个值。

monthly_mean = array([  5.15    ,   5.948571,   7.028261,   4.144231,   3.585965,
         5.244828,   4.915455,   4.757   ,   5.803614,  12.573684,
         5.683333,   3.875   ])

任何帮助/建议都非常受欢迎!

1 个答案:

答案 0 :(得分:2)

您可以使用标记来检查何时必须停止搜索

flag = True
while (flag):
    for j in np.arange(1,13,1):
        # calculating monthly leanth from provided datasets 
        mlen = ((df_test[df_test.index.year==2000]).index.month==j).sum()

        # fit to my distribution
        phat = stats.exponweib.fit((df_test[df_test.index.month==j].mean(axis=1)).dropna())

        # predicting based on the fitted distribution
        esti = stats.exponweib.rvs(*phat,int(mlen))

        if esti.mean() == monthly_mean[0]:
            flag = False

由于您需要每月检查一次,因此您可以将if嵌入for循环

for month_thingy in monthly_mean:
    if esti.mean() == month_thingy:
        flag = False