Filter löschen
Filter löschen

Is NaN ok here?

1 Ansicht (letzte 30 Tage)
Vadim Potorocha
Vadim Potorocha am 20 Nov. 2020
Kommentiert: Vadim Potorocha am 20 Nov. 2020
%coin txt
5.00000000e-01 5.00000000e-01
%crime txt
1.66000000e-01 6.60000000e-02 1.40000000e-02 3.90000000e-02 1.40000000e-02 2.70000000e-02 7.20000000e-02 1.00000000e-03 9.00000000e-03 1.30000000e-02 5.50000000e-02 9.00000000e-03 2.80000000e-02 3.80000000e-02 2.60000000e-02 5.50000000e-02 9.60000000e-02 2.30000000e-02 3.50000000e-02 4.50000000e-02 5.40000000e-02 2.40000000e-02 1.00000000e-03 7.00000000e-03 2.00000000e-03 1.50000000e-02 7.00000000e-03 3.00000000e-03 0.00000000e+00 1.40000000e-02 1.80000000e-02 3.00000000e-03 5.00000000e-03 1.80000000e-02
%unfair.txt
9.99000000e-01 1.00000000e-03
%ventsel.txt
1.45000000e-01 6.40000000e-02 1.50000000e-02 3.90000000e-02 1.40000000e-02 2.60000000e-02 7.40000000e-02 8.00000000e-03 1.50000000e-02 6.40000000e-02 1.00000000e-02 2.90000000e-02 3.60000000e-02 2.60000000e-02 5.60000000e-02 9.50000000e-02 2.40000000e-02 4.10000000e-02 4.70000000e-02 5.60000000e-02 2.10000000e-02 2.00000000e-03 9.00000000e-03 4.00000000e-03 1.30000000e-02 6.00000000e-03 3.00000000e-03 1.50000000e-02 1.60000000e-02 3.00000000e-03 7.00000000e-03 1.90000000e-02
%ralph.txt
3.36184163e-02 1.43227594e-01 1.64970470e-01 1.34046838e-01 7.52792246e-02 6.54570283e-02 5.34771727e-03 9.39337045e-02 1.06252105e-01 1.77866902e-01
%ALPH_ENTROPY FUNCTION
function h = alph_entropy(P)
h = sum(-P .* log2(P));
end
%APLH_REDUNDANCY FUNCTION
function r = alph_redundancy(P)
r = sum(1 - (alph_entropy(P)./log2(P)));
end
%main.m
A = load("coin.txt",'-ascii')
B = load("crime.txt",'-ascii')
C = load("unfair.txt",'-ascii')
D = load("ventsel.txt",'-ascii')
E = load("ralph.txt",'-ascii')
Z = [alph_entropy(A) alph_redundancy(A); alph_entropy(B) alph_redundancy(B) ; alph_entropy(C) alph_redundancy(C); alph_entropy(D) alph_redundancy(D); alph_entropy(E) alph_redundancy(E)];
save results.txt Z -ascii;
MATRIX RESULT
%results.txt
1.00000000e+00 4.00000000e+00
NaN NaN
1.14077577e-02 9.90444552e+00
4.41966505e+00 5.87982853e+01
3.06961940e+00 1.90521746e+01

Akzeptierte Antwort

John D'Errico
John D'Errico am 20 Nov. 2020
Bearbeitet: John D'Errico am 20 Nov. 2020
Sure. It does not bother me. Why does it bother you?
B = [1.66000000e-01 6.60000000e-02 1.40000000e-02 3.90000000e-02 1.40000000e-02 2.70000000e-02 7.20000000e-02 1.00000000e-03 9.00000000e-03 1.30000000e-02 5.50000000e-02 9.00000000e-03 2.80000000e-02 3.80000000e-02 2.60000000e-02 5.50000000e-02 9.60000000e-02 2.30000000e-02 3.50000000e-02 4.50000000e-02 5.40000000e-02 2.40000000e-02 1.00000000e-03 7.00000000e-03 2.00000000e-03 1.50000000e-02 7.00000000e-03 3.00000000e-03 0.00000000e+00 1.40000000e-02 1.80000000e-02 3.00000000e-03 5.00000000e-03 1.80000000e-02];
alph_entropy = @(P) sum(-P .* log2(P));
alph_entropy(B)
ans =
NaN
Why is that?
B(29)
ans =
0
In fact, B(29) was 0.00000000e+00.
Your entropy formula will generate NaN when any element is exactly zero. And since the redundancy code uses the entropy computation, it too results in NaN.
So what do you expect? Looks fine.
When you see a problem, LOOK AT YOUR DATA. THINK ABOUT WHAT YOUR CODE IS DOING.
You might decide if you can just drop any zero elements of the vector. Does that make sense?
  3 Kommentare
John D'Errico
John D'Errico am 20 Nov. 2020
If it is homework, then you might look at the formulas for entropy, and decide how zero impacts the result you would expect. Would deleting zero elements be a problem? You were given this as homework, so you are the one who is supposed to think.
Vadim Potorocha
Vadim Potorocha am 20 Nov. 2020
yep deleting zero elements coulda be the answer. But i have another formula with limit in it, but in GNU Octave i have no idea how to code it lim(inf to 0) = -p/ln(2)

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

KSSV
KSSV am 20 Nov. 2020
You have alph_entropy output as 1. log2(1) will be zero and when it is divided i.e. when it is denominator; you will get NaN.
  2 Kommentare
Vadim Potorocha
Vadim Potorocha am 20 Nov. 2020
How can i avoid zero arguments in log2?
Vadim Potorocha
Vadim Potorocha am 20 Nov. 2020
lim(inf)→0(−p/ln2) can help but i can't find how to code this function

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Get Started with MATLAB finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by