Sono risultati Entropy ordinare-dipendente quando si utilizza SameTest
-
26-10-2019 - |
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?
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