【发布时间】:2012-07-20 04:16:21
【问题描述】:
我有一个随机数数组。我只想根据 0.07 的概率更改一些元素。目前我正在使用 for 循环来迭代每个元素。有更好的方法吗?
【问题讨论】:
我有一个随机数数组。我只想根据 0.07 的概率更改一些元素。目前我正在使用 for 循环来迭代每个元素。有更好的方法吗?
【问题讨论】:
如果有问题的数组被称为a,您可以选择其值的平均比例为0.07
a[numpy.random.rand(*a.shape) < 0.07]
我不知道如何您想更改这些值。要将它们乘以 2,只需这样做
a[numpy.random.rand(*a.shape) < 0.07] *= 2.0
【讨论】:
random.sample(xrange(len(a)),int(len(a)*0.07)) 作为索引,或者模舍入。
斯文的回答很优雅。但是,使用
选择要更改的元素要快得多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 或更多的因数。
【讨论】: