NumPy以给定的概率更改数组的元素

时间:2012-07-20 21:05:33

标签: arrays random numpy

我有一组随机数。我想根据概率0.07来改变一些元素。目前我正在使用for循环迭代每个元素。有没有更好的方法呢?

2 个答案:

答案 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或更大的因子。