2

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

4

2 回答 2

8

如果调用有问题的数组a,您可以通过以下方式选择其值的 0.07 的平均比例

a[numpy.random.rand(*a.shape) < 0.07]

我不知道想如何更改这些值。要将它们乘以 2,只需执行

a[numpy.random.rand(*a.shape) < 0.07] *= 2.0
于 2012-07-20T21:09:16.270 回答
3

斯文的回答很优雅。但是,选择要更改的元素要快得多

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 或更多的因子。

于 2014-07-17T08:40:41.193 回答