Wolfram mathematica 使用SameTest时,熵结果是否与顺序有关

Wolfram mathematica 使用SameTest时,熵结果是否与顺序有关,wolfram-mathematica,entropy,Wolfram Mathematica,Entropy,使用SameTest选项时,Mathematica的Entropy函数依赖于顺序 即: Entropy[RandomSample[Range[11]], SameTest->(Abs[#1-#2]>1&) ] 将多次给出不同的结果 我假设这是因为Entropy[]实际上是Union-将列表化,但与Union不同的是,它实际上是将SameTest值中的一个替换为另一个,并且这种替换是顺序敏感的 这是一个bug还是预期的行为?您可以使用跟踪[]看到熵[]函数最终使用计数[]计算

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

即:

Entropy[RandomSample[Range[11]], SameTest->(Abs[#1-#2]>1&) ]
将多次给出不同的结果

我假设这是因为
Entropy[]
实际上是
Union
-将列表化,但与
Union
不同的是,它实际上是将
SameTest
值中的一个替换为另一个,并且这种替换是顺序敏感的


这是一个bug还是预期的行为?

您可以使用
跟踪[]
看到
熵[]
函数最终使用
计数[]
计算每个状态的频率(本例中为数字)

比如说

 Entropy[{1,2,3,4}, SameTest->(Abs[#1-#2]>1&)]  
2 === 4 && 4 === 1  but  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  
你的情况不是这样的。比如说

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

@berniethejet:关于StackOverflow的问题需要有一个问题在里面,否则它们往往会被关闭。因此,我以问题的形式重新表述了您的错误报告。从一些实验来看,当列表中的第一项为1或n时,
Range[n]
的排列似乎会给出一个结果,其余时间则会给出不同的结果。可能值得一封电子邮件support@wolfram.com.@尤达。好的,谢谢,我不介意。我认为这个要求有点不必要,会降低论坛的价值。但我相信创造者们有他们的理由。还是比Mathematica Usenet论坛更好@布雷特:你什么意思?你是怎么排列的?你是说RandomSample[{1 2 3}]做了一些与Range[{2,3,4}]不同的事情?检查
Union/@GatherBy[{First[#]的输出,N@Entropy[#,SameTest->(Abs[#1-#2]>1&])&/@Permutations[Range[5]],Last[[All,All,1]]
。感谢贝里萨利斯的分析,这非常有趣。我怀疑这会导致熵的产生,然后实际上给出了错误的答案——而不仅仅是统计上的错误答案——只要以欧几里得的方式使用SameTest。@bernie Yep。距离通常不会分割等价类中的域,因此这不是熵的缺陷。我试图从我在物理学中学过的原始意义上得到熵的度量,粒子在空间中分布越均匀,熵就越大,而在粒子集中时熵就越小。“我原以为距离足够远,但显然我错了……”伯尼·托伊读到