Написал функцию по расчету энтропии. Является ли моя реализация достаточно эффективной?
def entropy(a_list):
d = {}
entropy_ = 0
for i in a_list:
if i not in d:
d[i] = 1
else:
d[i] += 1
for value in d.values():
entropy_ += - value / len(a_list) * np.log2(value / len(a_list))
return entropy_
Ответы (1 шт):
Автор решения: Ildar
→ Ссылка
немного улучшил в плане читаемости и производительности, для подсчета количества каждого элемента можно использовать Counter из модуля collections он также делает словарь как и в вашем примере, также value / len(a_list) можно не вычислять два раза а вычислить один раз и потом подставлять
from collections import Counter
import numpy as np
def get_entropy(array):
counter = Counter(array)
entropy = 0
len_array = len(array)
for value in counter.values():
p = value / len_array
entropy += -p * np.log2(p)
return entropy