分布不会影响种子。详情如下:
我查看了源代码:numpy/random/_generator.pyx#L669 https://github.com/numpy/numpy/blob/f1c4ba3e97cbf5c494f29531b35da6144cac5aec/numpy/random/_generator.pyx#L669
If p
给出,它将使用rng.random
获得一个随机值:
import numpy
pop = numpy.arange(20)
seed = 1
rng = numpy.random.default_rng(seed)
# rng.choice works like bellow
rand = rng.random()
p = numpy.repeat(1/len(pop),len(pop))
cdf = p.cumsum()
cdf /= cdf[-1]
uniform_samples = rand
idx = cdf.searchsorted(uniform_samples, side='right')
idx = numpy.array(idx, copy=False, dtype=numpy.int64) # yields 10
print(idx)
# -----------------------
rng = numpy.random.default_rng(seed)
idx = rng.choice(pop,p=numpy.repeat(1/len(pop),len(pop))) # same as above
print(idx)
If p
没有给出,它将使用rng.integers
获得一个随机值:
rng = numpy.random.default_rng(seed)
idx = rng.integers(0, pop.shape[0]) # yields 9
print(idx)
# -----------------------
rng = numpy.random.default_rng(seed)
idx = rng.choice(pop) # same as above
print(idx)
您可以使用不同的seed
价值。我不知道会发生什么rng.random
and rng.integers
,但您可以看到它们的行为有所不同。这就是为什么你得到不同的结果。