Python question. Estoy generando una gran variedad de objetos, que solo necesito hacer una pequeña muestra aleatoria. En realidad, generar los objetos en cuestión lleva un tiempo, por lo que me pregunto si sería posible saltear de algún modo los objetos que no necesitan generar y solo crear explícitamente aquellos objetos que se han muestreado.Lazy muestra resultados aleatorios en python
En otras palabras, ahora tengo
a = createHugeArray()
s = random.sample(a,len(a)*0.001)
que es más bien un desperdicio. Preferiría algo más flojo como
a = createArrayGenerator()
s = random.sample(a,len(a)*0.001)
No sé si esto funciona. La documentación de random.sample no está muy clara, aunque menciona xrange como muy rápida, lo que me hace pensar que podría funcionar. Convertir la creación de la matriz en un generador sería un poco laborioso (mi conocimiento de los generadores está muy oxidado), así que quiero saber si esto funciona con antelación. :)
Una alternativa que puedo ver es hacer una muestra aleatoria a través de xrange, y solo generar aquellos objetos que son realmente seleccionados por índice. Sin embargo, eso no es muy claro, porque los índices generados son arbitrarios e innecesarios, y necesitaría una lógica bastante hacky para apoyar esto en mi método generateHugeArray.
Para puntos de bonificación: ¿cómo funciona random.sample en realidad? Especialmente, ¿cómo funciona si no se conoce el tamaño de la población por adelantado, como con generadores como xrange?
Qué tipo de datos proporciona generateHugeArray() crear? –
Actualmente, una simple lista de objetos antiguos, con todas las permutaciones posibles de un cierto espacio de estado del cual solo necesito una pequeña muestra. Para un juego de lobo cuántico en particular, consulte https://github.com/verhoevenv/bra -ket-wolf/blob/master/multiverse.py # L87 donde primero creo todos los universos y luego creo universos filtrados. – Verhoevenv