Написал функцию по расчету энтропии. Является ли моя реализация достаточно эффективной?

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
→ Ссылка