初歩的な質問で大変恐縮です。
if文の条件式の中にnumpyやpandasなどの配列がある場合の対処方法につまづいています。
【やりたいこと】
関数を定義して、配列に対して逐次的に処理したい。
true(0, 1のラベル)の値によって返す結果を変えたい。
trueが1なら-np.log(p)を返し、trueが0なら-np.log(1 - p)を返す。
python
1true = np.array([1,0,1,0,1,1,0,0]) 2proba = np.array([1,0.1,0.9,0.3,0.8,0.7,0.3,0.2]) 3 4def logloss(true_label, predict_proba, eps=1e-15): 5 p = np.clip(proba, eps, 1 - eps) # 発散しないように 6 7 if true == 1: 8 return -np.log(p) 9 else: 10 return -np.log(1 - p) 11 12logloss(true, proba) 13 14 15
発生するエラー
python
1ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
trueが配列であるためambiguousと判定されたのかと思い、.any()、.all()でやってみましたが思うような結果が得られなかったため、trueとprobaをzip()で1つずつ取り出そうとしましたが、ドツボにはまってしまいました。
良い対処法を教えて頂けましたら幸いです。
よろしくお願い致します。
回答3件
あなたの回答
tips
プレビュー