values in falling in each histogram bin

Hello,
sig=randn(1,440); %random data set
bin1=round(1+log2(size(sig,2))); %optimal number of bins
edges = linspace(min(sig), max(sig), bin1+1);
bins = (edges(1:end-1) + edges(2:end))/2;
[counts,binIdx] = histc(sig, edges); %bin count
counts(end) = []; %remove the additional added bin
binIdx(binIdx==bin1+1) = bin1; %set the index
figure; hist(sig,bin1) %plot histogram
How do I find the values of sig falling in each bin? My final goal is to have only those values from 'sig' in a variable which are below a count of (say 20) in the histogram.
please help

Respuestas (1)

José-Luis
José-Luis el 21 de Ag. de 2012
sig=randn(1,440); %random data set
bin1=round(1+log2(size(sig,2))); %optimal number of bins
edges = linspace(min(sig), max(sig), bin1+1);
bins = (edges(1:end-1) + edges(2:end))/2;
[n,xOut]= hist(sig,bins); %or use histc if you want to specify the edges.
n is the vector of values you are looking for.
Cheers!

7 comentarios

zozo
zozo el 21 de Ag. de 2012
@Jose: xOut only has center values located in each bin(vector of size equal to bin1). Iam looking for ALL values which fall in each bin(due to historgam) from the input data vector sig
for example: If I have 10 bins and say first bin has count=11 and second bin has a count=19. Now I want a vector of all values in each of these bins (11+19=30), belonging to the sig in a vector as my output.
Maybe
cumsum(xOut);
zozo
zozo el 21 de Ag. de 2012
does not work :(
Sorry, i meant:
cumsum(n); %n is a vector with the number of values in each bin
For more details, look at the documentation (help hist or help histc).
zozo
zozo el 22 de Ag. de 2012
I got till there. I want to extract the actual values falling in each of the bins(not the count in each bin).
sig=randn(1,440); %random data set
bin1=round(1+log2(size(sig,2))); %optimal number of bins
edges = linspace(min(sig), max(sig), bin1+1);
bins = (edges(1:end-1) + edges(2:end))/2;
PointsInBin = cell(length(edges) - 1,1);
PointsInBin(1) = {sig(sig>= edges(1) & sig<=edges(2))};
for k = 3:length(edges)
PointsInBin(k-1) = {sig(sig>edges(k-1) & sig <= edges(k))};
end
zozo
zozo el 22 de Ag. de 2012
Editada: zozo el 22 de Ag. de 2012
@Jose: Thank you. I have simplified it further:
sig=randn(1,440); %random data set
bin1=round(1+log2(size(sig,2))); %optimal number of bins
edges = linspace(min(sig), max(sig), bin1+1);
bins = (edges(1:end-1) + edges(2:end))/2;
[n,whichbin]= histc(sig,edges);
PointsInBin=cell(length(edges)-1,1);
for k=1:bin1
flagBinMem=(whichbin==k);
PointsInBin(k)={sig(flagBinMem)};
end

Iniciar sesión para comentar.

Etiquetas

Preguntada:

el 21 de Ag. de 2012

Community Treasure Hunt

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

Start Hunting!

Translated by