#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()?