Numpy Pure Functions para rendimiento, almacenamiento en caché
Estoy escribiendo algunos códigos críticos de rendimiento moderado en números. Este código estará en el bucle más interno, de un cálculo que el tiempo de ejecución se mide en horas. Un cálculo rápido sugiere que este código se ejecutará algo así como 10 ^ 12 veces, en algunas variaciones del cálculo.
Así que la función es calcular sigmoide (X) y otra para calcular su derivada (gradiente). Sigmoide tiene la propiedad que para
y = sigmoide (x), dy / dx = y (1-y)
En python para numpy esto se ve así:
sigmoid = vectorize(lambda(x): 1.0/(1.0+exp(-x)))
grad_sigmoid = vectorize(lambda (x): sigmoid(x)*(1-sigmoid(x)))
Como se puede ver, ambas funciones son puras (sin efectos secundarios), por lo que son candidatas ideales para la memoria, al menos a corto plazo, tengo algunas preocupaciones sobre el almacenamiento en caché de cada llamada al sigmoide que se haya realizado: Almacenamiento de 10 ^ 12 flotadores que Tomaría varios terabytes de la memoria RAM.
¿Hay una buena manera de optimizar esto?
¿Python se dará cuenta de que son funciones puras y las almacenará en caché para mí, según corresponda?
¿Me estoy preocupando por nada?