Creating 1D array from frequency data/histogram?

22 visualizaciones (últimos 30 días)
Rose Lakatos
Rose Lakatos el 15 de Jun. de 2018
Respondida: Steven Lord el 27 de Jun. de 2018
I’m trying to run an algorithm that requires a 1 dimensional data to work. My data is grey values from ct images describing the frequency of 8bit pixel values from 0-255. Is it possible to create an 1D array [0,1,2,3,4,5...255] with corresponding frequency of that pixel value?

Respuestas (2)

Steven Lord
Steven Lord el 27 de Jun. de 2018
If you want the resulting array to contain exactly n(1) copies of x(1), n(2) copies of x(2), etc. use the repelem function. [Depending on how you want to use the result, you may also want to "shuffle" it using randperm.]
x = 0:5;
freq = [2 3 4 5 6 7];
A = repelem(x, freq);
If instead of frequencies you have probabilities for what each element of the resulting array should be, use discretize.
p = freq./sum(freq);
cumulativeprob = [0 cumsum(p)];
B = discretize(rand(1, 1000), cumulativeprob, x);
Let's check that the proportions of elements in B come close to the probabilities in p.
c = histcounts(B, 'BinEdges', [x x(end)], 'Normalization', 'probability');
[c; p]
The values in c look reasonably close to the probabilities in p for just 1000 samples.

Gayatri Menon
Gayatri Menon el 27 de Jun. de 2018
Hi,
Could you check out "histogram" command. Please refer to the below documentation to know more on this comment:
Hope this helps.
Gayatri

Categorías

Más información sobre Histograms en Help Center y File Exchange.

Etiquetas

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by