Python scipy: неподдерживаемые типы операндов для ** или pow (): 'list' и 'list' - PullRequest
6 голосов
/ 06 февраля 2012

Мне нужно подогнать функцию к массиву данных и получить оптимальные коэффициенты уравнения этой функции. Я использую метод curve_fit из библиотеки scipy. Он основан на методе наименьших квадратов.

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

Возвращает следующую ошибку

TypeError: неподдерживаемые типы операндов для ** или pow (): 'list' и 'list'

Но когда я использую другую, более простую функцию без включения питания, она работает

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

Должно быть, оно пытается вывести число в степень целого массива входных данных

Что делать? Помогите пожалуйста ...

1 Ответ

7 голосов
/ 06 февраля 2012

Похоже, вы после поэтапного поднятия мощности?

Как a*x[i]**(b*x[i]) для каждого я?

В этом случае вы должны использовать функцию np.power:

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

Тогда это работает.

(Кроме того, может быть целесообразно преобразовать x и y из списков в массивы numpy: np.array(x)).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...