2017-03-10 13 views
0
def Ftrapz(x): 
    global a2 
    if x<a: 
     a2=0 
    elif a<=x<=b: 
     a2=(0.5*k1*x**2+b1*x)-(0.5*k1*a**2+b1*a) 
    else: 
     a2=(0.5*k1*b**2+b1*b)-(0.5*k1*a**2+b1*a) 
    return a2 

trapz_test=stats.kstest(x0,Ftrapz) 

私はstats.kstestを使用して配列x0と自分自身で定義された分布関数をテストしたいと考えています。しかし、このプログラムにはいくつかの問題があります。そのため、呼び出し可能関数を正確に使用する方法は? それは言われています:kstestで呼び出し可能な関数を使用するには?

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

+2

あなたの質問は不明である:他の条件が失敗したときに、それが実行されますように一つは、対応する式の最後の1作ることによって乱雑logical_andを回避することができます。もっと文脈が必要です。 [ask]をお読みください。 –

+0

「このプログラムで何か問題があります」とは何ですか?それが何であるか分からなければ、問題を診断することはできません。 – zack6849

+0

ValueError:複数の要素を持つ配列の真理値はあいまいです。 a.any()またはa.all()を使用する – Kirito

答えて

0

Ftrapzへの引数としてnumpyの配列を渡しkstest方法。したがって、if文では、x<aのブール値の配列があり、その結果、あいまいさに関するエラーが発生します。解決方法は、allまたはanyを使用するが、配列を処理するように関数を書き換えるにはではなく、ではありません。これを行う典型的な方法は、numpy.piecewiseであり、範囲のリストとそれらの範囲で実行される関数のリスト(定数でもよい)を取ります。 numpyの配列の比較はとして便利スカラー用としてネストすることができないことに注意してください

def Ftrapz(x): 
    ranges = [x < a, np.logical_and(a <= x, x <= b), x > b] 
    values = [0, lambda x : (0.5*k1*x**2+b1*x)-(0.5*k1*a**2+b1*a), (0.5*k1*b**2+b1*b)-(0.5*k1*a**2+b1*a)] 
    return np.piecewise(x, ranges, values) 

a <= x <= bはエラーをスローしますあなたの関数は次のように表すことができました。

ranges = [x < a, x > b] 
    values = [0, (0.5*k1*b**2+b1*b)-(0.5*k1*a**2+b1*a), lambda x : (0.5*k1*x**2+b1*x)-(0.5*k1*a**2+b1*a)] 
+0

OK – Kirito

関連する問題