Python scipy: tipo (s) de operando no compatibles para ** o pow (): ‘lista’ y ‘lista’

Necesito ajustar la función al conjunto de datos y obtener los coeficientes óptimos de una ecuación de esta función. Utilizo el método curve_fit de la librería scipy. Se basa en el método de mínimos cuadrados.

import numpy as np from scipy.optimize import curve_fit #This is my function from which i need to get optimal coefficients 'a' and 'b' def func(x, a, b): return a*x**(b*x) #the arrays of input data x = [1,2,3,4,5] y =[6,7,8,9,10] #default (guess) coefficients p0 = [1, 1] popt, pcov = curve_fit(func, x, y, p0) print popt 

Devuelve el siguiente error

TypeError: tipo (s) de operando no admitidos para ** o pow (): ‘lista’ y ‘lista’

Pero cuando uso la otra función más simple, sin operación de potencia, funciona.

 def func(x, a, b): return a*x + b 

Debe estar intentando boost el número a una potencia de un conjunto completo de datos de entrada

¿Qué hacer? Ayuda por favor…

Parece que estás después de boost el nivel de potencia?

Como a*x[i]**(b*x[i]) para cada i?

En ese caso, tienes que usar la función np.power :

 def func(x,a,b): return a*np.power(x,b*x) 

Entonces funciona.

(Dejando de lado, puede valer la pena convertir x e y de listas a múltiples arreglos: np.array(x) ).