在Python 3中使用浮点值返回0的除法

时间:2016-09-11 19:37:29

标签: python

我在python 3中运行一个函数,它将值计为浮点数,但当它们被分割时返回值为0,就好像它们是整数一样。

功能:

def precision_recall(predictions, results):

#values initiated as floats for later division
tp, fp, fn, tn, i = 0.0, 0.0, 0.0, 0.0, 0

while i < len(results):

        if predictions[i] == 1 and results[i] == 1:
            tp = tp + 1
        elif predictions[i] == 1 and results[i] == 0:
            fp = fp + 1
        elif predictions[i] == 0 and results[i] == 0:
            tn = tn + 1
        else: 
            fn = fn + 1
        i = i + 1

precision = tp / (tp + fp)
recall = tn / (tn + fn)
f1 = precision*recall / (precision + recall)
print("Precision: %d, Recall: %d, f1: %d" % (precision, recall, f1))
print(tp, fp, fn, tn)

变量预测和结果是填充值为0或1的列表。

此函数返回以下输出:

Precision: 0, Recall: 0, f1: 0
(113.0, 34.0, 23.0, 187.0)

即,除非用于浮点值,否则除法返回0。

此外,如果我在命令行上运行相同的Precision公式,一切运行正常:

113.0 / (113.0 + 34.0)
Out[25]: 0.7687074829931972 

我用numpy,pandas和sklearn编写这个脚本,但是我不相信任何这些应该改变这种操作应该发生的方式。

我也使用Python 3,我的理解是它自动将分区作为浮点数处理。

此外,如果我进行此修改:

precision = tp / float(tp + fp)

我得到了相同的结果。

我已经尝试了

from __future__ import divsion

这也没有改变任何东西。

有人知道可能出现什么问题吗?

this response中的答案都不适合我。

0 个答案:

没有答案