1
resposta

Dúvida np.random.choice()

Fala galera, tudo bem?

Eu não entendi muito bem o termo p da função np.random.choice().

Li a documentação:

p: 1-D array-like, optional The probabilities associated with each entry in a. If not given the sample asumes a uniform distribution over all entries in a.

Ou seja, eu crio um array que define a probabilidade de escolher cada curso? É isso mesmo? Pois se eu não informo, ele vai distribuir os valores de forma uniforme, ou seja, terá o mesmo número de cursos para todos?

prob:

todas_matriculas = []
x = np.random.rand(20)
prob = x / sum(x)
prob
array([0.03444168, 0.06983424, 0.04421015, 0.05731322, 0.05498633,
       0.01830839, 0.01049315, 0.08150745, 0.06868354, 0.02371343,
       0.05623134, 0.105889  , 0.07483705, 0.04964209, 0.03040911,
       0.04675813, 0.05078491, 0.01570861, 0.04635523, 0.05989293])

E executo:

for index, row in nomes.iterrows():
    id = row.id_aluno
    matriculas = row.matriculas
    for i in range(matriculas):
        mat = [id, np.random.choice(cursos.index,p = prob)]
        todas_matriculas.append(mat)

matriculas = pd.DataFrame(todas_matriculas, columns= ['id_aluno','id_curso'])
1 resposta

Olá Romeu tudo bem??

Então conforme a documentação, como descreveu:

numpy.random.choice(a, size=None, replace=True, p=None)

"Parameters a: 1-D array-like or int If an ndarray, a random sample is generated from its elements. If an int, the random sample is generated as if a were np.arange(a)

size: int or tuple of ints, optional Output shape. If the given shape is, e.g., (m, n, k), then m * n * k samples are drawn. Default is None, in which case a single value is returned.

replace: boolean, optional Whether the sample is with or without replacement

p1-D array-like, optional The probabilities associated with each entry in a. If not given the sample assumes a uniform distribution over all entries in a."

O atributo p é opcional. As probabilidades associadas as entradas em a. Caso não seja atribuído um valor, ele assumirá uma distribuição uniforme para todas as entradas em a.

"Ou seja, eu crio um array que define a probabilidade de escolher cada curso? É isso mesmo? Pois se eu não informo, ele vai distribuir os valores de forma uniforme, ou seja, terá o mesmo número de cursos para todos?"

No nosso exemplo, usamos:

todas_matriculas = []
x = np.random.rand(20)
prob = x  / sum(x)

Foi definido exatamente isso, um array com as probabilidades para serem utilizadas no valor de p, pois caso contrário, seria atribuído um valor uniforme para todas as entradas.

Espero ter ajudado Romeu, qualquer coisa já sabe, só retornar aqui =)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software