2012-07-20 60 views

回答

6

如果有问题的数组被称为a,您可以通过

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

选择其值的0.07的平均比例,我不知道怎么要改变这些值。为了将它们乘以两,只要做

a[numpy.random.rand(*a.shape) < 0.07] *= 2.0 
+0

太棒了!谢谢。我只是想将它们更改为其他随机值。这比我的循环好得多。 – wot 2012-07-20 21:21:42

+1

请注意,单独更改元素与概率* p *并更改“其值的比例* p *”之间存在差异。我认为显示的代码是前者。 – 2012-07-20 21:38:12

+0

@tc如何完成后者? – wot 2012-07-20 21:50:24

2

斯文的答案是优雅的。然而,它的速度要快得多来挑选要与

n = numpy.random.binomial(len(a), 0.07) 
a[numpy.random.randint(0, len(a), size=n)] *= 2.0 

第一表达决定要多少个元素进行采样以改变元件(n为(a)中,但平均0.07 0和len之间的整数),第二个生成正好你想要检索的索引数量。 (请注意,但是,你可能会得到同样的指数几次。)

的差异
a[numpy.random.rand(len(a)) < p] 

为p接近1变小,但对于小P,它可能是10倍或更多。