SORU
13 Kasım 2010, CUMARTESİ


Tam sayılar rasgele liste oluşturmak Python

Test amaçlı tamsayı rastgele bir liste oluşturmak istiyorum. Sayıları dağılımı önemli değildir. Kont olan tek şeyzaman. Oluşturmak rasgele sayılar, zaman alıcı bir görev olduğunu biliyorum, ama daha iyi bir yolu olmalı.

İşte benim geçerli çözüm:

import random
import timeit

# random lists from [0-999] interval
print [random.randint(0,1000) for r in xrange(10)] # v1
print [random.choice([i for i in xrange(1000)]) for r in xrange(10)] # v2 

# measurement:
t1 = timeit.Timer('[random.randint(0,1000) for r in xrange(10000)]','import random') # v1
t2 = timeit.Timer('random.sample(range(1000), 10000)','import random') # v2

print t1.timeit(1000)/1000
print t2.timeit(1000)/1000

v2 v1 den daha hızlı ama bu kadar büyük çaplı bir işe yaramıyor. Aşağıdaki hata verir: 'ValueError: örnek nüfusundan daha büyük '

Bu ölçekte çalışan, hızlı ve verimli bir çözüm biliyor musunuz?

Düzenleme:

Andrew: 0.000290962934494

gnibbler: 0.0058455221653

KennyTM: 0.00219276118279

NumPy geldim, gördüm, ele geçirdi

Teşekkür ederim!

CEVAP
13 Kasım 2010, CUMARTESİ


Ne istediğinizi, ama numpy.random.randint kullanmak istiyorsunuz tam olarak net değil:

import numpy.random as nprnd

t1 = timeit.Timer('[random.randint(0,1000) for r in xrange(10000)]','import random') # v1
### change v2 so that it picks numbers in (0,10000) and thus runs...
t2 = timeit.Timer('random.sample(range(10000), 10000)','import random') # v2
t3 = timeit.Timer('nprnd.randint(1000, size=10000)','import numpy.random as nprnd') # v3

print t1.timeit(1000)/1000
print t2.timeit(1000)/1000
print t3.timeit(1000)/1000

benim makine verir

0.0233682730198
0.00781716918945
0.000147947072983

Randint olduğunu unutmayınçokrastgele farklı.örnek (sipariş için çalışmak durumda kaldım değiştirmek için 1,000 10,000 gibi bir yorumcunun belirttiği -- Eğer gerçekten istiyorsan onlardan 0 1.000 olabilir böl 10). Ve eğer gerçekten o zaman ne alıyorsanız umurumda değil eğer sen ya da senin sorunu çok iyi anladım, ya da o kaba geldiyse özür dilerim rasgele sayılar ile... mümkün

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Christian Atlas

    Christian At

    26 Mart 2009
  • Top Gear

    Top Gear

    27 Mart 2006