如果我评估类似的东西:
numpy.random.choice(2, size=100000, p=[0.01, 0.99])
使用一个均匀分布的 random float
,比如说r
,并决定是否r < 0.01
可能会浪费许多生成的随机位(熵)。我听说(二手)生成伪随机数在计算上很昂贵,所以我假设不会这样做numpy
,而是在这种情况下使用像算术编码这样的方案。
然而,乍一看似乎确实为每个被要求的样本choice
生成了一个。float
此外,一项快速timeit
实验表明,生成n
统一的浮点数实际上比n
来自p=[0.01, 0.99]
.
>>> timeit.timeit(lambda : numpy.random.choice(2, size=100000, p=[0.01, 0.99]), number=1000)
1.74494537999999
>>> timeit.timeit(lambda : numpy.random.random(size=100000), number=1000)
0.8165735180009506
真的会为每个样本choice生成一个吗?float在某些情况下使用某种压缩算法是否不会显着提高性能(特别是如果size它很大且p分布不均匀)?如果不是,为什么不呢?
慕侠2389804
相关分类