Entropy
使用该SameTest
选项时, Mathematica 的函数是依赖于顺序的。
那是:
Entropy[RandomSample[Range[11]], SameTest->(Abs[#1-#2]>1&) ]
会多次给出不同的结果。
我认为这是因为Entropy[]
实际上是Union
对列表进行 -izing,但与 不同Union
的是,它实际上是用另一个SameTest
值替换了一个值,并且这种替换是顺序敏感的。
这是一个错误还是预期的行为?
Entropy
使用该SameTest
选项时, Mathematica 的函数是依赖于顺序的。
那是:
Entropy[RandomSample[Range[11]], SameTest->(Abs[#1-#2]>1&) ]
会多次给出不同的结果。
我认为这是因为Entropy[]
实际上是Union
对列表进行 -izing,但与 不同Union
的是,它实际上是用另一个SameTest
值替换了一个值,并且这种替换是顺序敏感的。
这是一个错误还是预期的行为?
您可以看到使用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