Ver Mensaje Individual
  #19 (permalink)  
Antiguo 09/06/2014, 13:39
Avatar de razpeitia
razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Problema: Memory Error

Cita:
Iniciado por edanvar Ver Mensaje
1: tu codigo hace exactamente lo mismo que el mio, esto esta perfecto, pero tu codigo usa mas lineas, y mi entender es mas dificil de leer.
Que use mas o menos lineas de código no hace un código mas fácil o difícil de leer. El usar nombres descriptivos, separar bien los bloques de codigo (o espacios en blanco), en otras cosas lo hacen mas legible.

En tu caso tuve que expander la parte del for para ver bien que hacías. Ademas la parte donde usas np.array, lo que problablemente no sabes es que np.array hace por default una copia de la lista que le pases. Lo cual probablemente también te incremente el consumo de memoria. http://docs.scipy.org/doc/numpy/refe...mpy.array.html

Cita:
Iniciado por edanvar Ver Mensaje
2: por que, al principio, en lugar de usar diccionarios que son bastante eficientes, estas usando "set"?? eso influye en las busquedas?
Esto si es cuestión de gustos. Ademas que vi que estabas usando un diccionario como un set. Entonces solo use sets.

Cita:
Iniciado por edanvar Ver Mensaje
3: no puedo extraer directamente la mean y std en la query, bueno, si que puedo haciendo mean([row['ok_page'] for row in.....]) pero eso implica recorrer la table una vez para mean, y otra vez para std ---> seria menos eficiente, en mi caso solo recorro la tabla una vez, guardo lo que necesito en aux, y ahi hago la mean y std. Creo que es bastante eficiente.
Aqui tienes que poner en la balanza eficiencia vs uso de memoria. Tal vez recorrer la tabla 2 veces sea mas lento, pero realmente es mas eficiente en cuanto a la memoria? Esto tu lo tendrás que averiguar.

Cita:
Iniciado por edanvar Ver Mensaje
Por ultimo, al final hablas de hacer mas rapido esto, luego aquello etc....mi problema no es la velocidad es el consumo....estoy trabajando ahora con memprof....a ver que puedo sacar.
Como te dije arriba. Tienes que poner las cosas en la balanza.

Como te dije antes necesitas hacer profiling (o hacer mediciones) antes de optimizar. ¿Que tal si ese pedazo de código no es el que esta consumiendo mas memoria? ¿Que tal si es una función que mandas a llamar antes de esa? En otra parte completamente diferente.

Otra cosa no se que tantos datos sean. Pero lo que pones de 8,000 a 10,000 no son muchos datos.

Poner mas ram a la maquina es ciertamente otra solución. Especialmente cuando los precios por mas memoria están tan bajos.

Bueno, sin metricas, solo un pedacito de código y nada de datos, dudo mucho que te podamos ayudar. Buena suerte en lo que sea que trates de hacer.