2014-12-04 24 views
-2

這是我的代碼:的Python:Python中的浮動(VAR)的轉換不會工作

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仍然作爲整數處理?爲什麼是這樣?任何人都可以指出我可能會得到預期的結果嗎?

問候!

+1

你** **代替了'float'對象'x'被綁定到一個新的價值。 Python變量沒有類型,它們只是對象的引用。 – 2014-12-04 14:56:00

回答

1

如果你

>>> 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'> 

你還有一個整數。相反,你可以在你的公式上的變量使用float:

>>> x = float(2)/4 
>>> x 
0.5 

你也可以使用from __future__ import division

當前劃分(/)操作員具有用於 數值參數不明確的含義:它返回除法的數學 結果的地板如果參數是整數或多頭,但它 返回的一個合理的近似如果 參數是浮點型或複雜的,則會導致除法結果。

參見:PEP 238

1

已經聲明爲float的X(1)並沒有任何關係做在第二行計算的結果是:它就是被扔掉,並用結果替換從那裏。相反,您需要明確將該計算的某些元素用於浮動。

整個事情可以通過拆分它,這樣可以更清楚:

def pmi(w1,w2): 
    first = float(bg_fdist[(w1, w2)]) 
    second = float(f_brown[(w1)]*f_brown[(w2)]) 
    result = first/second 
    return result