4

Entropy使用该SameTest选项时, Mathematica 的函数是依赖于顺序的。

那是:

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

会多次给出不同的结果。

我认为这是因为Entropy[]实际上是Union对列表进行 -izing,但与 不同Union的是,它实际上是用另一个SameTest值替换了一个值,并且这种替换是顺序敏感的。

这是一个错误还是预期的行为?

4

1 回答 1

3

您可以看到使用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 没有按照应有的方式将域划分为两个等价类。

编辑

只是重新表述最后一句话:

Mma 假设

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

在你的情况下这是不正确的。例如

2 === 4 && 4 === 1  but  2 !=== 1
于 2011-06-11T03:56:00.203 回答