我有一个随机数数组。我只想根据 0.07 的概率更改一些元素。目前我正在使用 for 循环来迭代每个元素。有没有更好的方法来做到这一点?
问问题
2661 次
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 回答