1. ホーム
  2. python

[解決済み] Python scipy: ** や pow() でサポートされていないオペランドタイプ: 'list' や 'list' です。

2022-02-07 13:41:53

質問

データの配列に関数をフィットさせ、その関数の方程式の最適な係数を求める必要があります。私は カーブフィット というメソッドがあります。これは最小二乗法に基づいている。

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

入力データの配列全体のべき乗を計算しようとしているのでしょう。

どうしたらいいのでしょうか?助けてください...

解決方法は?

エレメント単位のパワーアップを狙ってるようですが?

のように a*x[i]**(b*x[i]) を各 i に割り当てますか?

その場合は np.power 関数を使用します。

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

すると、うまくいくのです。

(余談ですが、このような場合は xy をリストからnumpyの配列に変換します。 np.array(x) ).