У меня есть пример гистограммы с:как вычислить энтропию от н.п. гистограммы
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 и вычислить энтропию? Я бы также получил ошибку математической области для энтропии, даже если мой код выше правильный. :(
** Edit: Как найти энтропию, когда Mu = 0 и журнал (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)' в undefined. Но почему вы используете 'range = (- 20,20)'? Я не думаю, что 'np.random.normal (mu2, sigma2, 100000)' производит любое отрицательное число! Во всяком случае, до тех пор, пока в некоторых ячейках нет точек, вы получите эту ошибку! – Mahdi
Эй! Благодаря! Я его разобрал. Я использовал, чтобы обрезать все данные 0! – Vinci
Добро пожаловать! Это хорошее решение! Если вы думаете, что мой ответ помог, пожалуйста, примите ответ, чтобы вопрос был отмечен! – Mahdi