【发布时间】:2014-02-14 06:32:52
【问题描述】:
以下代码是我的 Python 代码的瓶颈:
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 静态类型变体? -
糟糕,我正在将 Cythonized 版本转换为 python 的问题,但我忘了删除它。我会解决的
-
predictions应该是全局变量吗?
标签: python numpy vectorization numeric