как запустить определенную функцию, пока мы не получим нужные значения, python - PullRequest
0 голосов
/ 14 мая 2018

У меня есть цикл 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 = 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 голосов
/ 14 мая 2018

Вы можете использовать флаг, чтобы проверить, когда вам нужно прекратить поиск

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...