Случайные числа для больших групп населения - PullRequest
1 голос
/ 13 марта 2020

У меня большая популяция (n_population>sys.maxsize), чтобы взять n_samples различных образцов, например:

n_population = 22256639186670493696
n_samples = 2

Моей первой идеей было использовать sklearn.utils.random.sample_without_replacement, потому что в любом случае мы используем scikit-learn и, что более важно, это позволяет мне определить random_state для последовательного воспроизведения результатов. Однако, это терпит неудачу:

sample_without_replacement(n_population=n_population, n_samples=n_samples)
# OverflowError: Python int too large to convert to C long

Я понимаю, почему это терпит неудачу, но я не нашел способа обойти это с помощью scikit-learn. Поэтому я обратился к обычному Python, используя встроенный random.sample. Тем не менее, это также дает сбой:

random.sample(range(n_population), k=n_samples)
#OverflowError: Python int too large to convert to C size_t

В конце концов, я нашел обходной путь, который отлично работает:

samples = []
while len(samples) < n_samples:
    s = random.randint(0, n_population-1)
    if s not in sample:
        samples.append(s)

Но ему не хватает random_state. Есть ли лучшее решение, желательно реализованное на вершине scikit-learn?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...