我有一组随机数。我想根据概率0.07来改变一些元素。目前我正在使用for循环迭代每个元素。有没有更好的方法呢?
答案 0 :(得分:6)
如果有问题的数组被称为a
,您可以选择其值的平均比例为0.07
a[numpy.random.rand(*a.shape) < 0.07]
我不知道如何您想要更改这些值。要将它们乘以2,只需执行
a[numpy.random.rand(*a.shape) < 0.07] *= 2.0
答案 1 :(得分:2)
斯文的回答很优雅。但是,使用
选择要更改的元素要快得多n = numpy.random.binomial(len(a), 0.07)
a[numpy.random.randint(0, len(a), size=n)] *= 2.0
第一个表达式确定要采样的元素数量(n是0到len(a)之间的整数,但平均值为0.07),第二个表达式确定要检索的索引数。 (但请注意,您可能会多次获得相同的索引。)
与
的区别a[numpy.random.rand(len(a)) < p]
当p接近1时,变小,但对于小p,它可能是10或更大的因子。