Кажется, не удается сгенерировать случайные числа

#python #numpy #random

#python #numpy #Случайный

Вопрос:

У меня есть информация о генерации случайных чисел. Вы можете видеть, что случайные числа генерируются четыре раза во вложенном цикле:

 prob_burn = 0.1
for times in range(20):
        
    for i in range(1, row-1):
        for j in range(1, col-1):

            if yards[i][j] == 2:
                rand = np.random.rand() 
                if yards[i 1][j] == 1: # South
                    if rand < prob_burn:
                        yards[i 1][j] = 2
                    else:
                        yards[i 1][j] = 1

                rand = np.random.rand()        
                if yards[i][j 1] == 1: # East
                    if rand < prob_burn:
                        yards[i][j 1] = 2 
                    else:
                        yards[i][j 1] = 1 

                rand = np.random.rand()        
                if yards[i-1][j] == 1: # North
                    if rand < prob_burn:
                        yards[i-1][j] = 2
                    else:
                        yards[i-1][j] = 1

                rand = np.random.rand()
                if yards[i][j-1] == 1: # West
                    if rand < prob_burn:
                        yards[i][j-1] = 2 
                    else:
                        yards[i][j-1] = 1

                yards[i][j] = 0
            else:
                continue
    print(rand)
 

когда код многомерного массива «ярдов»:

 row = 42
col = row

yards = [[0 for i in range(col)] for j in range(row)]
prob_tree = 0.8 

for i in range(1, row-1):
    for j in range(1, col-1):
        rand = np.random.rand()
        if rand < prob_tree:
            yards[i][j] = 1
        else:
            yards[i][j] = 0

yards[6][6] = 2
 

Я был сбит с толку, когда составлял это. Это дает результат:

 0.9858723195931566
0.9858723195931566
0.9858723195931566
0.9858723195931566
0.9858723195931566
0.9858723195931566
0.9858723195931566
0.9858723195931566
0.9858723195931566
0.9858723195931566
0.9858723195931566
0.9858723195931566
0.9858723195931566
0.9858723195931566
0.9858723195931566
0.9858723195931566
0.9858723195931566
0.9858723195931566
0.9858723195931566
0.9858723195931566
 

Это, кажется, на самом деле не генерирует случайные числа между [0,1]. Я уже пытался увеличить этот цикл ‘times’ более чем на 20, но все равно дает аналогичную характеристику. Как ее решить?

Ответ №1:

print вызывается в самом крайнем цикле, поэтому он получает только последнее значение rand.

просто печатайте значение rand после каждого вызова rand, и вы увидите, что оно действительно работает, и каждый раз разное.

         rand = np.random.rand()
        print(rand)
 

Вы получите что-то вроде:

 0.360516239461243
0.5027246719138412
0.5227674056389815
0.34277438417911266
0.34277438417911266
0.34277438417911266
0.34277438417911266
0.34277438417911266
0.34277438417911266
0.34277438417911266
0.34277438417911266
0.34277438417911266
0.34277438417911266
0.34277438417911266
0.34277438417911266
0.34277438417911266
0.34277438417911266
0.34277438417911266
0.34277438417911266
0.34277438417911266
0.34277438417911266
0.34277438417911266
0.34277438417911266
0.34277438417911266
 

Комментарии:

1. Спасибо, но теперь у меня есть еще одна лучшая проверка, которая заключается только в том, чтобы поместить ‘print (rand)’ после ‘yards [i] [j] = 0’

2. Хорошо, так это решает вашу проблему? или у вас другая проблема с rand()?