¿Cómo tomar el ln de una función en python?

Utilicé polyfit para encontrar un fitline de un conjunto de datos, pero ahora necesito encontrar el registro natural de esa función de fitline y trazarlo. Esto es lo que tengo hasta ahora:

#Fit line for PD deg = 10 zn = np.polyfit(l_bins, l_hits, deg) l_pn = np.poly1d(zn) pylab.plot(l_bins, l_pn(l_bins), '-g') ln_list = [] for all in l_bins: ln_list.append(np.log(l_pn(all))) pylab.plot(l_bins, ln_list, '-b') 

¿Hay una forma mejor o más correcta de hacer esto?

Editar
Yo sugeriría usar numpy.log como Roger Fan demostró a continuación. Dado que ya está utilizando una gran cantidad de matrices, esto superará el uso de un map o una lista de comprensión.


Respuesta original
Si tiene una list de valores z, puede usar map para realizar alguna función a cada valor, en este caso el log (que es ln ).

 >>> x = range(1,10) >>> x [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> from math import log >>> map(log, x) [0.0, 0.6931471805599453, 1.0986122886681098, 1.3862943611198906, 1.6094379124341003, 1.791759469228055, 1.9459101490553132, 2.0794415416798357, 2.1972245773362196] 

Puede usar cualquier función, así que puede usar numpy.log si lo prefiere.

Parece que solo desea los valores de los contenedores proporcionados originalmente. En ese caso, esto es más simple y será mucho más rápido.

 ln_list = np.log(l_pn(l_bins)) 

Tenga en cuenta que, por lo general, las funciones numpy se aplicarán de forma elemental a una matriz si tiene sentido hacerlo.

log (x) se basa en 10, mientras que ln (x) se basa en logaritmo natural.

Ok, hablar es barato, muestra el código:

 import math x = 8 print math.log(x, math.e)