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?
Could you check out "histogram" command. Please refer to the below documentation to know more on this comment:
Hope this helps.
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.