Counting number of 1's in different bins

3 views (last 30 days)
MiauMiau
MiauMiau on 8 May 2015
Commented: MiauMiau on 8 May 2015
Hi
I have again a question regarding bins:
Again an array A:
A = [100 150 190 200 250 300 350 370 390 400 400]
and a second array B which saves if a stimuli with the intensity as defined in A was recognized by a subject or not:
B = [ 0 1 0 0 1 1 1 0 1 0 1]
edges = linspace(min(A),max(A),4);
First I bin A in the bins [100,200), [200,300) and [300,400] as follows:
temp = histc(A, edges);
counts = temp(1:end-1);
counts(end) = counts(end)+ temp(end);
Now I want to know for each bin, how many 1's it contains (as stored in B). How do I do that? I started to code with a for loop but the code became quite complicated, so maybe my approach was wrong to start with..
  2 Comments
MiauMiau
MiauMiau on 8 May 2015
I have unfortunately an older Matlab version - and since I have to change the output of histc (see last edge) it does not exactly output the indices I need (thought is still useful I think). I corrected my question now. Thanks though!

Sign in to comment.

Answers (3)

Michael Haderlein
Michael Haderlein on 8 May 2015
Edited: Michael Haderlein on 8 May 2015
histc can have two output parameters:
[temp,ind] = histc(A,[100,200,300,400]);
Use the second one as input parameter for accumarray:
>> accumarray(ind',B',[],@sum)
ans =
1
1
3
1

Purushottama Rao
Purushottama Rao on 8 May 2015
For a binary vector B
K= sum(B==1)
will return no of 1s
  1 Comment
MiauMiau
MiauMiau on 8 May 2015
that is not the question. the question is number of 1s for each bin

Sign in to comment.


Andrei Bobrov
Andrei Bobrov on 8 May 2015
A = [100 150 190 200 250 300 350 370 390 400 400];
B = [ 0 1 0 0 1 1 1 0 1 0 1];
[~,ii] = histc(A,[100 200 300 inf]);
out = accumarray(ii(:),B(:));

Community Treasure Hunt

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

Start Hunting!