[Python-es] error de memoria al generar lista de numeros aleatorios uniformes en numpy

Kiko kikocorreoso en gmail.com
Dom Abr 6 23:49:33 CEST 2014


El 6 de abril de 2014, 23:24, AGTUGO <agtugo en gmail.com> escribió:

> Hola a todos,
> hace mucho que no les escribía pero los leo de hace unos añitos,
>
> Tratando de correr el codigo siguiente me sale MemoryError: cuando uso
> valores de 5e7 o mas de sample size. Estoy generando dos listas de numeros
> aleatorios despues, veo si cumplen una condicion y los que cumplen los
> sumo. Es el clasico programa tratando de calcular pi usando monte-carlo.
> ¿Alguien sabe como hacerle para poder usar samples mas grandes sin que
> ipython llore?
>
>
Si el 'sample size' son 5e7 estás usando casi 400Mb por cada array creado.

Soluciones:

-Comprando más RAM :-P

-si estás haciendo simulaciones MonteCarlo, ¿para qué quieres esos arrays
tan grandes en memoria? Puedes usar arrays más pequeños y hacerlo por
partes.

-np.random.uniform crea arrays con float64 (8 bytes), podrías crearlos de
float16 si es suficiente (divides la memoria usada por 4). Ejemplo,

x = np.random.uniform(0,1,size_sample).astype(np.float16)

-Dependiendo de como hagas las operaciones (no las muestras) puedes estar
creandos arrays intermedios temporales que ocupen tanto como las matrices
que estás creando y, por tanto, usando más memoria de la necesaria.

-puedes guardar los arrays en ficheros y usar memmap

-puedes usar pytables

-Otras soluciones que ahora no se me ocurren.

import numpy as np
> from pylab import plot,show,axis
>
> size_sample = 1e7
> x = np.random.uniform(0,1,size_sample)
> y = np.random.uniform(0,1,size_sample)
>
>
>
>
> --
> Arturo Muñoz
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20140406/f838c321/attachment.html>


Más información sobre la lista de distribución Python-es