2012-08-28 26 views
7

Necesito generar una gran matriz (o lista) con números aleatorios (10⁵ números). Yo estaba tratando de esa manera:Gran matriz con números aleatorios con python

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

Pero cuando trato de ejecutar:

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

Archivo "/usr/lib/python2.7/random.py", línea 320, en la muestra aumento ValueError ("muestra más grande que la población") ValueError: muestra más grande que la población

¿Alguna solución?

las TKN

+6

Teniendo en cuenta el tamaño de esa lista, es posible que desee considerar una biblioteca de matriz como [numpy] (http://numpy.scipy.org/) : 'import numpy; vet = numpy.random.randint (0, 10, 10000) ' – Snowball

Respuesta

19

Lo que queremos es

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

Desde el 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.

así que cuando llamando al random.sample(range(10), 100000) está tratando de extraer 100000 elementos únicos en una secuencia de longitud 10 que obviamente no puede funcionar.

Tenga en cuenta que

  • random.random() devuelve un valor flotante entre [0; 1)
  • random.randrange([start], stop[, step]) devuelve un elemento aleatorio de la secuencia de range([start], stop[, step])
  • random.randint(a, b) devuelve un valor entero en [a; b]
  • cuando se utiliza random.sample, la igualdad len(population) >= k debe mantener
8

creo que lo que busca es algo como esto:

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