Domanda

funzione Entropy di Mathematica è ordine-dipendente quando si utilizza l'opzione SameTest.

Questo è il seguente:

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

darà risultati diversi molte volte.

Si considera che questo è perché Entropy[] è infatti Union-izing lista, ma, a differenza Union, in realtà è sostituire uno dei valori SameTest con l'altro, e questa sostituzione è dell'ordine sensibile.

Questo è un bug o è il comportamento previsto?

È stato utile?

Soluzione

Si può vedere utilizzando Trace[ ] che la funzione Entropy[ ] finisce usando Tally[ ] per contare la frequenza di ogni stato (numeri in questo caso).

Così, per esempio

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

chiamate

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

che dà

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

perché gruppi {1,3,4} e {2}

Ma se chiedi

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

si ottiene

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

perché gruppi {2,4} e {1,3}

Conseguente una distribuzione differente stati (2,2) vs (3,1) prima, e quindi in un valore diverso entropia.

Credo che il problema nasce dal fatto che il tuo SameTest non è il dominio partizionamento in due classi di equivalenza, come dovrebbe.

Modifica

Proprio riformulare l'ultima frase:

Mma presuppone che

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

che non è vero nel tuo caso. Ad esempio

2 === 4 && 4 === 1  but  2 !=== 1
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top