我有下面的代碼是在我的Python代碼的瓶頸:如何優化此NumPy代碼?
def get_payoff(self, actual, predicted):
if abs(actual - 1.0) < 1e-5: # if actual == 1
if predicted < 0.5:
return self.fn_payoff * (0.5 - predicted)
elif predicted > 0.5:
return self.tp_payoff * (predicted - 0.5)
else:
return 0
else:
if predicted < 0.5:
return self.tn_payoff * (0.5 - predicted)
elif predicted > 0.5:
return self.fp_payoff * (predicted - 0.5)
else:
return 0
def get_total_payoff(self):
total_payoff = 0
for target_element, prediction_element in zip(np.nditer(self.target), np.nditer(predictions)):
total_payoff += self.get_payoff(target_element, prediction_element)
fn_payoff,tp_payoff,tn_payoff和fp_payoff都是浮動。 self.target和self.predictions都是numpy ndarrays。
我認爲有一些方法可以用某種numpy向量化替換get_total_payoff中的for循環,但我不知道如何處理if/then語句來正確地進行向量化。
'def float get_payoff()' - 呃,這是一個錯字還是你使用了一個隱含的靜態類型的Python變體? – delnan
糟糕,我正在將Cythonized版本轉換爲Python的問題,我忘記刪除它。我會修復它 –
'預測'應該是一個全局變量嗎? – user2357112