4

4現在、多くのデータを正弦関数に当てはめようとしています。データのセット (1D 配列) が 1 つしかない場合は、正常にscipy.optimize.curve_fit()動作します。ただし、私が見る限り、関数自体が1次元のみの場合、高次元のデータ入力は許可されません。Pythonでは非常に遅く動作するため、forループを使用して配列を反復処理したくありません。

これまでのコードは次のようになります。

from scipy import optimize
import numpy as np    
def f(x,p1,p2,p3,p4): return p1 + p2*np.sin(2*np.pi*p3*x + p4)      #fit function

def fit(data,guess):
   n = data.shape[0] 
   leng = np.arange(n)
   param, pcov = optimize.curve_fit(f,leng,data,guess)
   return param, pcov

ここで、 data は 3 次元配列 ( ) であり、各行を出力として整形配列として関数shape=(x,y,z)に適合させたいと考えています。もちろん、多次元データの場合、これはdata[:,a,b]param(4,y,z)

ValueError: operands could not be broadcast together with shapes (2100,2100) (5)

これには簡単な解決策があるかもしれませんが、それを行う方法がわかりません。助言がありますか?

これらのキーワードを含むほとんどのトピックは高次元関数のフィッティングに関連しているため、私の質問に対する答えを探すのは非常に困難でした。

4

1 に答える 1