% E = ENTROPY2(MTX,BINSIZE) 
% 
% Compute the first-order sample entropy of MTX.  Samples of VEC are
% first discretized.  Optional argument BINSIZE controls the
% discretization, and defaults to 256/(max(VEC)-min(VEC)).
%
% NOTE: This is a heavily biased estimate of entropy (it is too
% small) when you don't have much data!

% Eero Simoncelli, 6/96.

function res = entropy2(mtx,binsize)

%% Ensure it's a vector, not a matrix.
vec = mtx(:);
[mn,mx] = range2(vec);

if (exist('binsize') == 1)
  nbins = max((mx-mn)/binsize, 1);
else
  nbins = 256;
end
  
[bincount,bins] = histo(vec,nbins);

%% Collect non-zero bins:
H = bincount(find(bincount));
H = H/sum(H);

res = -sum(H .* log2(H));

