Как сделать a1, a2 и a3 для чтения в цикле? - PullRequest
0 голосов
/ 31 октября 2019

У меня есть проблема, когда мне нужно рандомизировать значение в массиве, но мне нужно объявить a1, a2 и a3 снаружи, потому что a1, a2 и a3 должны быть равны 100. Но когда я это делаю, не могубыть рандомизированным .. цикл продолжает выполнять то же значение случайным образом.

a3=random.randint(0,1)
a2=random.randint(0,50)
a1=100-a2-a3
random_array =  np.array([np.array([ a2, a1, a3]) for _ in range(x)])

Вот результат, который я получил:

[ 6 94  0]   
[ 6 94  0]  
[ 6 94  0]   
[ 6 94  0] 
[ 6 94  0]   
[ 6 94  0]  
[ 6 94  0]  
[ 6 94  0]   
[ 6 94  0]   

Ответы [ 2 ]

0 голосов
/ 31 октября 2019

Как и в комментарии hpaulj, случайные функции Numpy могут возвращать numpy массивы. Это может устранить необходимость в любых явных циклах.

import numpy as np

n=10
a3 = np.random.randint(0,2, n)    # The upper limit is exclusive so randint(0,1) is always 0
a2 = np.random.randint(0,50, n)
a1 = 100-a2-a3

a1
# array([77, 72, 81, 57, 84, 60, 97, 54, 52, 86])

a2
# array([23, 27, 19, 42, 16, 39,  2, 45, 48, 14])

a3
# array([0, 1, 0, 1, 0, 1, 1, 1, 0, 0])

Если вам нужен массив массивов:

np.stack((a1,a2,a3), axis=1)
# array([[77, 23,  0],
#        [72, 27,  1],
#        [81, 19,  0],
#        [57, 42,  1],
#        [84, 16,  0],
#        [60, 39,  1],
#        [97,  2,  1],
#        [54, 45,  1],
#        [52, 48,  0],
#        [86, 14,  0]])
0 голосов
/ 31 октября 2019

Вам нужно вызвать randint внутри цикла, если вы хотите каждый раз получать разные случайные значения.

random_array = []
for _ in range(x):
    a3=random.randint(0,1)
    a2=random.randint(0,50)
    a1=100-a2-a3
    random_array.append([a2, a1, a3])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...