2012-08-28 18 views
7

Ho bisogno di generare un grande array (o lista) con numeri casuali (numeri 10⁵). Stavo cercando così:Grande array con numeri casuali con pitone

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

Ma quando provo a fare funzionare:

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

File "/usr/lib/python2.7/random.py", la linea 320, in campione rilancio ValueError ("sample larger than population") ValueError: campione più grande della popolazione

Qualsiasi soluzione?

tkns

+6

Considerando le dimensioni di tale elenco, si potrebbe prendere in considerazione una libreria di matrice come [NumPy] (http://numpy.scipy.org/) : 'importa numpy; vet = numpy.random.randint (0, 10, 10000) ' – Snowball

risposta

19

quello che vuoi è

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

Dal 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.

così quando chiamando random.sample(range(10), 100000) stai cercando di estrarre 100000 elementi unici in una sequenza di lunghezza 10 che ovviamente non può funzionare.

noti che

  • random.random() restituisce un valore fluttuante tra [0; 1)
  • random.randrange([start], stop[, step]) restituisce un elemento casuale della sequenza range([start], stop[, step])
  • random.randint(a, b) restituisce un valore intero [a; b]
  • quando si utilizza random.sample, l'uguaglianza len(population) >= k deve essere in possesso
8

Penso che tu sia alla ricerca di qualcosa di simile:

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