Избегайте использования нескольких операторов if - PullRequest
1 голос
/ 25 сентября 2019

Я пытаюсь создать оператор if, чтобы проверить условие для каждой итерации

          for in range(100):
            B10 = np.random.randint(0, precip.shape[0])
            T10 = np.random.randint(0, precip.shape[0] )

            if np.abs(B10-T10) <=30:
                T10 = np.random.randint(0, precip.shape[0])

Я хочу создать условие if, которое будет получать новые значения T10 до тех пор, пока указанное условие не будет выполнено для каждой итерации.,Как я могу это сделать?

Ответы [ 4 ]

3 голосов
/ 25 сентября 2019

Используйте цикл while вместо цикла for:

B10 = np.random.randint(0, precip.shape[0])
T10 = np.random.randint(0, precip.shape[0])
while np.abs(B10-T10) <= 30:
    B10 = np.random.randint(0, precip.shape[0])
    T10 = np.random.randint(0, precip.shape[0])

или вы можете избежать повторного выделения переменных с помощью следующего:

while True:
    B10 = np.random.randint(0, precip.shape[0])
    T10 = np.random.randint(0, precip.shape[0])
    if not (np.abs(B10-T10) <=30):
        break

В целом, это хорошийПрактикуйтесь использовать цикл for, когда вы знаете количество итераций вашего цикла или когда вы используете коллекции.Однако, когда вы этого не знаете, т. Е. Когда это зависит от условия, вы должны использовать цикл while.

1 голос
/ 25 сентября 2019
T10 = np.random.randint(0, precip.shape[0])
while True:
    B10 = np.random.randint(0, precip.shape[0])
    T10 = np.random.randint(0, precip.shape[0])
    if not (np.abs(B10-T10) <=30):
        break
1 голос
/ 25 сентября 2019

Если я правильно вас понял, это должно быть сделано:

df['B10'] = np.random.randint(0, df.shape[0], df.shape[0])
df['T10'] = df['B10'].apply(lambda x: np.random.randint(0, x+1))
1 голос
/ 25 сентября 2019

Избегайте цикла и оператора if, генерируя случайные числа, которые вы хотите.В вашем коде T10 будет случайным значением между max (0, B10 - 30) и min (UB, B10 + 10) включительно.

max_delta = 30
B10 = np.random.randint(0, UB)
T10 = np.random.randint(max(0, B10 - max_delta), min(UB, B10 + max_delta  + 1))

, где UB = deg.shape [0].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...