Я использую следующий код, чтобы вернуть энтропию Шеннона для массива, представляющего распределение вероятностей.
A = np.random.randint(10, size=10)
pA = A / A.sum()
Shannon2 = -np.sum(pA*np.log2(pA))
Это отлично работает, если массив не содержит нулей.
Пример:
Input: [2 3 3 3 2 1 5 3 3 4]
Output: 3.2240472715
Однако, если массив содержит нули, энтропия Шеннона дает nan
Пример:
Input:[7 6 6 8 8 2 8 3 0 7]
Output: nan
Я получаю два RuntimeWarnings:
1) RuntimeWarning: деление на ноль встречается в log2
2) RuntimeWarning: недопустимое значение, обнаруженное при умножении
Есть ли способ изменить код, чтобы включить нули? Я просто не уверен, что их полное удаление повлияет на результат. В частности, если вариация будет больше из-за большей частоты в распределении.
pA = A / A.sum()
. РезультатA.sum()
меньше из-за присутствия нулей. - person fasta   schedule 23.04.2018