top of page

[Python] Cannot cast array data from dtype('O') to dtype('float64') according to the rule 'safe'


現象


spicy.optimizeのleastsqで最小二乗法でフィッティングをしようとしたらタイトルのエラーが発生。


from scipy import optimize
import numpy as np
    
def internalFunc1(x, plist):
    
    a=plist[0]
    b=plist[1]
    
    return a*x**2+b
    
def myFunc(x, param):
    
    a=param[0]
    b=param[1]       
      
    return a*x+internalFunc1(x, b)
def fit(param, x, y):
    
    def residual(param, x, y):
        return y-myFunc(x, param)
        
    result=optimize.leastsq(residual, param, args=(x, y))   
    return result
x=np.linspace(0, 10, 101)
y=np.random.randint(0, 10, 101)
param0=[1, [2, 3]]

fit(param0, x, y)
TypeError: Cannot cast array data from dtype('O') to dtype('float64') according to the rule 'safe'


原因


leastsqのパラメータの中にlistが入っていること。以下のように修正すればエラーは出なくなった。


def myFunc(x, param):
    
    a=param[0]
    b=param[1:]       
      
    return a*x+internalFunc1(x, b)
x=np.linspace(0, 10, 101)
y=np.random.randint(0, 10, 101)
param0=[1, 2, 3]

fit(param0, x, y)


最新記事

すべて表示

[Python]pandas.DataFrameをjsonで出力

概要 pythonでデータ解析を行っている。解析自体はpandasを用いて行い、最終結果はpandas.DataFrameの形式で保持されている。 この結果を他のアプリケーションで利用するため、json形式でファイル出力したい。 やり方 1 pandas.DataFrameをdictionaryに変換 data = df.to_dict(orient='records') 2 ファイルに出力 wi

[Python] 条件付きでフィッティングをする

概要 フィッティングを行いたい場合、pythonならばscipy.optimize.leastsqなどでできます。 しかし、フィッティングを行う場合、フィッティングパラメータに条件を付けたい場合も多々あります。 例えば、下記のようにパラメータa、bは共に正の範囲で最適な値を求める、という感じです。 f(x, a, b)=a*x^2+b (a>0 and b>0) 今回はそんな手法についてご紹介しま

Comments


あなたの買い物をサポートする
アプリ Shop Plan

iphone6.5p2.png

​いつ何を買うかの計画を立てられるアプリです。

google-play-badge.png
Download_on_the_App_Store_Badge_JP_RGB_blk_100317.png

靴を大切にしよう!靴管理アプリ SHOES_KEEP

納品:iPhone6.5①.png

靴の履いた回数、お手入れ回数を管理するアプリです。

google-play-badge.png
Download_on_the_App_Store_Badge_JP_RGB_blk_100317.png

「後で読む」を忘れないアプリ ArticleReminder

気になった​Webサイトを登録し、指定時刻にリマインダを送れるアプリです

google-play-badge.png
Download_on_the_App_Store_Badge_JP_RGB_blk_100317.png
bottom of page