У меня большая популяция (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?