File Exchange

N-Dimensional Histogram Count

version 1.5.0.0 (2.46 KB) by
Bins the elements of n matrices into an n-dimensional histogram.

Updated 02 Dec 2010

HISTCND is similar to HISTC, but creates a histogram with any number of dimensions.

N = HISTCND(X,Y,Z,... XEDGES,YEDGES,ZEDGES,... )

where N is a histogram count with dimensions
length(XEDGES) x length(YEDGES) x length(ZEDGES) ...

If XEDGES, YEDGES, etc. are monotonically increasing and non-NaN, a data point is assigned to bin N(i,j,k,...) if

XEDGES(i) <= X < XEDGES(i+1)

YEDGES(j) <= Y < YEDGES(j+1)

ZEDGES(k) <= Z < ZEDGES(k+1)

....

Note: data outside the ranges of the EDGES vectors are excluded from the histogram, and not placed in the first or last bins.

An example:

x=rand(100,100);
y=rand(100,100);
xedges=0:0.01:1;
yedges=0:0.1:1;

n=histcnd(x,y,xedges,yedges);

pcolor(xedges,yedges,n');
colorbar;

Cite As

Mathew (2021). N-Dimensional Histogram Count (https://www.mathworks.com/matlabcentral/fileexchange/29435-n-dimensional-histogram-count), MATLAB Central File Exchange. Retrieved .

Ruan Carvalho

It helped me a lot! Thank you very much sir.

Lukas Capan

Yixiang Luo

Nice function! Many thanks!
Two things I find could be improved:
1. when x or y is a row vector, it throws out an error;
2. the last bin (which is always zero) may be discarded, making the histogram has size length(edges)-1.

Mathew

Hi, I've been unable to produce this error. I tried with 4 columns of 1,000,000 data points, with 20 edge points for each dimension.

Using too many edge points (histogram bins) will make the output array too big for matlab to handle.

In the linux program 'top', I saw the MATLAB process was using around 4% of the memory (system has 4GB). Maybe you could try the code below, and see if it works on yours.
Cheers,
Mat

>> x1=rand(1000000,1);
>> x2=rand(1000000,1);
>> x3=rand(1000000,1);
>> x4=rand(1000000,1);
>> e1=linspace(0,1,20);
>> e2=e1;e3=e1;e4=e1;
>> tic;n=histcnd(x1,x2,x3,x4,e1,e2,e3,e4);toc;

Elapsed time is 2.554106 seconds.

>> size(n)

ans =

20 20 20 20

Justin

Hello,

I'm trying to use your program but it gives me an error that says "out of memory". I've been feeding in 4 columns of 10000 data points into the program.

Regards.

MATLAB Release Compatibility
Created with R2006b
Compatible with any release
Platform Compatibility
Windows macOS Linux