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

  • jocc talking shit

    jocc talking

    6 NİSAN 2007
  • Menglong Tav

    Menglong Tav

    18 Temmuz 2010
  • Orson Wang

    Orson Wang

    28 EKİM 2006