Как присвоить нулевые числа при генерации randint? - PullRequest
2 голосов
/ 04 августа 2020

Я хочу сгенерировать случайные числа, например

import random
import numpy as np
a=np.random.randint(8,size=(5,126))

Я хочу, чтобы когда список генерировал 126 случайных чисел от 0 до 7, присваивал 0 счетчиков, как я хочу. Например, возможно, этот код генерирует 630 случайных чисел. Я хочу иметь 5 строк с 590 нулевым отсчетом и 40 отсчетами от одного до семи из 630 случайных чисел.

Как я могу это сделать?

Ответы [ 3 ]

1 голос
/ 04 августа 2020

Если вам нужен точный счет для КАЖДОГО целого числа : вот способ сделать это для игрушечного примера с 10 нулями, 5 единицами и 5 двойками и формой (4,5). Вы можете изменить числа, их количество и форму по своему усмотрению):

#create integers in the counts you want and stack them into single 1-D array
A = np.hstack((np.zeros(10),np.ones(5),np.ones(5)*2))
#randomly shuffle them
np.random.shuffle(A)
#reshape to your desire
A = A.reshape(4,5)

Пример вывода:

[[2. 0. 1. 1. 2.]
 [1. 1. 0. 0. 2.]
 [1. 2. 0. 0. 0.]
 [0. 0. 0. 0. 2.]]

Если вы хотите точный подсчет ТОЛЬКО ДЛЯ 0s : Согласно комментарию @FBruzzesi, вот способ сделать это для игрушечного примера из 10 нулей и 10 единиц / двоек и формы (4,5). Вы можете изменить числа, их количество и форму по своему усмотрению):

#create integers in the counts you want and stack them into single 1-D array
A = np.hstack([np.zeros(10),np.random.randint(1,3,size=10)])
#randomly shuffle them
np.random.shuffle(A)
#reshape to your desire
A = A.reshape(4,5)

Пример вывода:

[[1. 2. 1. 2. 2.]
 [0. 0. 0. 0. 1.]
 [0. 1. 2. 0. 0.]
 [0. 0. 0. 1. 1.]]
0 голосов
/ 04 августа 2020

Думаю, это то, что вы ищете:

import numpy as np

arr = np.random.randint(1, 8, (5, 126))
idx = np.random.choice(range(arr.size), 590, replace=False)
arr[np.unravel_index(idx, arr.shape)] = 0

print (np.sum(arr == 0))
0 голосов
/ 04 августа 2020

Вы не можете сделать это за один шаг, но вы можете попробовать следующую процедуру: Сгенерируйте 126 случайных целых чисел в диапазоне [0-7] (включительно).

Затем вы подсчитаете количество нулей в массиве ( он должен быть около 16 ~ 126/8).

Теперь вы можете случайным образом установить для некоторых значений (которые не являются нулями) 0, пока не достигнете желаемого числа путем итерации по массиву.

...