我有一個直方圖的例子:如何從NP直方圖計算熵
mu1 = 10, sigma1 = 10
s1 = np.random.normal(mu1, sigma1, 100000)
和計算
hist1 = np.histogram(s1, bins=50, range=(-10,10), density=True)
for i in hist1[0]:
ent = -sum(i * log(abs(i)))
print (ent)
現在我想找到從給定的直方圖陣列熵,但由於np.histogram返回兩個數組,我在計算熵時遇到了麻煩。我怎樣才能調用np.histogram的第一個數組並計算熵?即使我上面的代碼是正確的,我也會得到熵的數學域錯誤。 :(
**編輯: 如何找到熵當穆= 0和log(0)產生數學域誤差
所以我嘗試寫實際的代碼是什麼??
mu1, sigma1 = 0, 1
mu2, sigma2 = 10, 1
s1 = np.random.normal(mu1, sigma1, 100000)
s2 = np.random.normal(mu2, sigma2, 100000)
hist1 = np.histogram(s1, bins=100, range=(-20,20), density=True)
data1 = hist1[0]
ent1 = -(data1*np.log(np.abs(data1))).sum()
hist2 = np.histogram(s2, bins=100, range=(-20,20), density=True)
data2 = hist2[0]
ent2 = -(data2*np.log(np.abs(data2))).sum()
到目前爲止,第一個例子ENT1將產生男,第二,ENT2,產生數學域誤差:(
顯然,問題是未定義的「log(0)」。但爲什麼你使用'range =( - 20,20)'?我不認爲'np.random.normal(mu2,sigma2,100000)'會產生任何負數!無論如何,只要有些垃圾箱裏沒有點數,你會得到這個錯誤! – Mahdi
嘿!謝謝!我把它整理出來了。我曾經修剪掉所有的0數據! – Vinci
不客氣!這是一個很好的解決方案!如果您認爲我的答案有幫助,請接受答案,以便問題將被標記! – Mahdi