2012-08-28 21 views
7

Potrzebuję wygenerować dużą tablicę (lub listę) z liczbami losowymi (liczby 10⁵). Próbowałem tak:Duża tablica z liczbami losowymi z pytonem

vet = random.sample(range(10),100000) 

Ale gdy próbuję uruchomić:

vet = random.sample(range(10),10000) 

Plik "/usr/lib/python2.7/random.py", linia 320, w przykładowej podbiciem ValueError ("próbka większa niż populacja") ValueError: próbka większa niż populacja

Jakieś rozwiązanie?

tkns

+6

Biorąc pod uwagę wielkość tej liście, może warto rozważyć biblioteki tablicy jak [numpy] (http://numpy.scipy.org/) : 'import numpy; vet = numpy.random.randint (0, 10, 10000) ' – Snowball

Odpowiedz

19

co chcesz to

[random.random() for _ in xrange(100000)] 

Z random module documentation:

random.sample(population, k) Return a k length list of unique elements chosen from the population sequence. Used for random sampling without replacement.

więc kiedy dzwoniąc pod numer random.sample(range(10), 100000) Próbujesz wyodrębnić 100000 unikalnych elementów w sekwencji o długości 10, która oczywiście nie może działać.

Zauważ, że

  • random.random() zwraca pływającą wartość pomiędzy [0; 1)
  • random.randrange([start], stop[, step]) zwraca element losowy z sekwencji range([start], stop[, step])
  • random.randint(a, b) zwraca wartość całkowitą w [A; b]
  • podczas korzystania random.sample, równość len(population) >= k musi posiadać
8

myślę, że jesteś po coś takiego:

vet = [random.randint(1,10) for _ in range(100000)]