2015-12-05 35 views
-1
from numpy import * 
from pylab import * 
from scipy import * 
from scipy.signal import * 
from scipy.stats import * 


testimg = imread('path') 

hist = hist(testimg.flatten(), 256, range=[0.0,1.0])[0] 
hist = hist + 0.000001 
prob = hist/sum(hist) 


entropia = -1.0*sum(prob*log(prob))#here is error 
print 'Entropia: ', entropia 

我有這樣的代碼,我不知道可能是什麼問題,感謝您的幫助只有長度爲1的陣列可以轉換到Python標量與日誌

+1

它在這裏運行。錯誤是什麼?你可以添加錯誤輸出嗎? – gabra

回答

4

這就是爲什麼你應該爲例從不使用from module import *。你忽視了功能的來源。當您使用多個from module import *調用時,一個模塊的名稱空間可能會破壞另一個模塊的名稱空間。事實上,根據錯誤消息,這似乎是在這裏發生的事情。

注意,當lognumpy.log,然後-1.0*sum(prob*np.log(prob))可以沒有錯誤計算:

In [43]: -1.0*sum(prob*np.log(prob)) 
Out[43]: 4.4058820963782122 

但當logmath.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 modulemodule.function的引用功能將有助於您避免將來出現此類錯誤。

相關問題