2012-07-20 61 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倍或更多。