How to create a histogram without using the matlab function

How to create a histogram without using the matlab hist function.
Given scattered data x = randn(1,100); y = randn(1,100);
with coresponding phase p = randn(1,100), having phase phase = exp(1i*p);
would like to create uniform grid, add the phase for the data points that are inside each bin.
This is to create a na intensity plot or coherent sum of the scattered data.

7 comentarios

Image Analyst
Image Analyst el 28 de Feb. de 2020
Editada: Image Analyst el 28 de Feb. de 2020
Why would you want to do that? What's wrong with using the built-in function that you bought along with MATLAB??? Which array (x, y, p, or phase) do you want to take the histogram of? Why not use histogram2()?
Ole
Ole el 28 de Feb. de 2020
Editada: Ole el 29 de Feb. de 2020
I want the intensity of the scattered data for let say E field at x , y random points and phases p. Inside each bin the phases of the points that are inside the bin and will add coherently, will interfere. So this is supposed to give the intensity of coherent radiation. So for each bin (abs(sum(exp(1*i*p)))).^2 or |sum(Phase)|^2
In addition to what has been said, it would be useful to know which 'matlab function' has been banned. There are many matlab functions that can be used to generate histograms: hist, histc, histogram, histcounts, histogram2, histcounts2, accumarray, imhist, probably more...
Ole
Ole el 29 de Feb. de 2020
Editada: Ole el 29 de Feb. de 2020
Nothing is banned . I just need to sum over a variable in this case the phases exp(1*i*p) in each bin , in addition to counting occurrences. Appears that the histogram functions count just occurrences and this is my struggle.
Why not
[counts, edges] = histcounts(phases, numberOfBins);
We're not sure what you want if it's not a count of the number of occurrences of values in certain ranges (bins). That is what a histogram is. How can you say you want a histogram but say you're struggling when the functions count the occurrences? That's what a histogram is.
@Ole, can you give a formal mathematical definition of what it is you want to calculate for a bin, because as you can see we're a bit confused.
There is scatted data (points) in space given as vectors x, y. Let say we discretize the data and in each bin (pixel) fall a set of points {x(k), y(k)}. Each point x(k), y(k) is associated with phase exp(1i*p(k)). In each bin (n,m) I would like to sum the phases for the points that fall inside the bin {x(k), y(k)} -> sum( exp(1i*p(k)) ). So the out put is a matrix M(n,m) that is with reduced size because of the binning and the values of the matrix are M(n,m) = sum( exp(1i*p(k)) ). And would like also to have the number of points x(k), y(k) that are in n,m bin (what histogram does).

Iniciar sesión para comentar.

 Respuesta aceptada

As Steven said, use discretize to find the bin indices and then one of the many aggregation functions in matlab. With 3 vector inputs, I'd use the older accumarray:
%demo data and bin definitions
x = randn(1, 100);
y = randn(1, 100);
p = randn(1, 100);
phase = exp(1i*p);
xedges = [-Inf, -3:3, +Inf]; %there will be one less bin that there are edges
yedges = [-Inf, -3:3, +Inf]; %see documentation of discretize
%histogram building
destrow = discretize(y, ybins);
destcol = discretize(x, xbins);
phasehistogram = accummaray([destrow, destcol], phase, [numel(ybins), numel(xbins)] - 1);
Or you could put the vectors in a table, and call groupsummary which would do the binning and summing for you:
%demo data and bin definitions
x = randn(1, 100);
y = randn(1, 100);
p = randn(1, 100);
phase = exp(1i*p);
xedges = [-Inf, -3:3, +Inf]; %there will be one less bin that there are edges
yedges = [-Inf, -3:3, +Inf]; %see documentation of discretize
%table construction and histogram:
phasetable = table(x, y, phase);
phasehistogram = groupsummary(phasetable, {'x', 'y'}, {xedges, yedges}, 'sum', 'phase');

Más respuestas (1)

Steven Lord
Steven Lord el 28 de Feb. de 2020
Consider using discretize to bin the data then passing that grouping information into groupsummary or splitapply.

Categorías

Más información sobre Data Distribution Plots en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

Ole
el 28 de Feb. de 2020

Comentada:

Ole
el 1 de Mzo. de 2020

Community Treasure Hunt

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

Start Hunting!

Translated by