这是我的代码:
def pmi(w1,w2):
x = float(1)
x = (bg_fdist[(w1, w2)])/(f_brown[(w1)]*f_brown[(w2)])
print x
输入的值将为:
>>> bg_fdist[('of','the')]
9781
>>> f_brown[('of')]
36412
>>> f_brown[('the')]
6997`
所以我希望我的 x 非常小,介于 0 和 1 之间。
但我得到的回报是:
>>>> pmi('of','the')
0
我认为可能是这样,因为 X 仍然作为整数处理? 这是为什么呢? 谁能指出我如何获得预期的结果?
问候!
您声明为 float(1) 的 x 与第二行中的计算结果没有任何关系:它只是被扔掉并替换为那里的结果。相反,您需要将该计算的某些元素显式地设置为浮点数。
通过拆分整个事情可以更清晰,如下所示:
def pmi(w1,w2):
first = float(bg_fdist[(w1, w2)])
second = float(f_brown[(w1)]*f_brown[(w2)])
result = first/second
return result
如果你这样做
>>> x = float(1)
>>> x
1.0
>>> type(x)
<type 'float'>
x 确实是一个浮点数。但是,如果在你用 int 实例化它之后,它就不再是浮点数了:
>>> x = 2
>>> x
2
>>> type(x)
<type 'int'>
在进行除法时,您使用的是整数,因此:
>>> x = 2/4
>>> x
0
>>> type(x)
<type 'int'>
您仍然有一个整数。相反,您可以在等式中的变量上使用浮点数:
>>> x = float(2)/4
>>> x
0.5
您也可以使用 from __future__ import division
.
当前除法 (/) 运算符的含义不明确 数值参数:它返回数学的底线 如果参数是整数或长整型,则除法的结果,但它 返回除法结果的合理近似值,如果 参数是浮点数或复杂参数。
参见:PEP 238