這就是爲什麼你應該爲例從不使用from module import *
。你忽視了功能的來源。當您使用多個from module import *
調用時,一個模塊的名稱空間可能會破壞另一個模塊的名稱空間。事實上,根據錯誤消息,這似乎是在這裏發生的事情。
注意,當log
指numpy.log
,然後-1.0*sum(prob*np.log(prob))
可以沒有錯誤計算:
In [43]: -1.0*sum(prob*np.log(prob))
Out[43]: 4.4058820963782122
但當log
指math.log
,然後一個TypeError升高:
In [44]: -1.0*sum(prob*math.log(prob))
TypeError: only length-1 arrays can be converted to Python scalars
解決方法是使用顯式的模塊導入和顯式引用來自mod的函數ULE的命名空間:
import numpy as np
import matplotlib.pyplot as plt
testimg = np.random.random((10,10))
hist = plt.hist(testimg.flatten(), 256, range=[0.0,1.0])[0]
hist = hist + 0.000001
prob = hist/sum(hist)
# entropia = -1.0*sum(prob*np.log(prob))
entropia = -1.0*(prob*np.log(prob)).sum()
print 'Entropia: ', entropia
# prints something like: Entropia: 4.33996609845
您發佈不會產生錯誤,但在某個地方實際代碼log
一定是必然math.log
,而不是numpy.log
代碼。使用import module
和module.function
的引用功能將有助於您避免將來出現此類錯誤。
它在這裏運行。錯誤是什麼?你可以添加錯誤輸出嗎? – gabra