Зависит ли порядок результатов энтропии при использовании SameTest - PullRequest
3 голосов
/ 11 июня 2011

Функция Entropy в Mathematica зависит от порядка при использовании опции SameTest.

То есть:

Entropy[RandomSample[Range[11]], SameTest->(Abs[#1-#2]>1&) ]

будет давать разные результаты много раз.

Я предполагаю, что это потому, что Entropy[] фактически Union -изменяет список, но, в отличие от Union, фактически заменяет одно из значений SameTest другим, и эта замена является порядком чувствительный.

Это ошибка или ожидаемое поведение?

1 Ответ

2 голосов
/ 11 июня 2011

Используя Trace[ ], вы можете видеть, что функция Entropy[ ] заканчивается использованием Tally[ ] для подсчета частоты каждого состояния (в данном случае чисел).

Так, например,

 Entropy[{1,2,3,4}, SameTest->(Abs[#1-#2]>1&)]  

вызывает

 Tally[{1,2,3,4}, SameTest->(Abs[#1-#2]>1&)]  

, что дает

 -> {{1, 3}, {2, 1}}

, поскольку оно группирует {1,3,4} и{2}

Но если вы спросите

 Tally[{2,1,3,4}, SameTest->(Abs[#1-#2]>1&)]  

, вы получите

  -> {{2, 2}, {1, 2}}

, потому что он группирует {2,4} и {1,3}

Результатом является другое распределение состояний (2,2) по сравнению с (3,1) ранее и, следовательно, другое значение энтропии.

Я думаю, что проблема возникает из-за того, что ваш SameTest не разделяет доменв двух классах эквивалентности, как и должно быть.

Редактировать

Просто переформулируем последнее предложение:

Мма предполагает, что

a === b && b === c  Implies a === c  

что не соответствует действительности в вашем случае.Например

2 === 4 && 4 === 1  but  2 !=== 1
...