Clear Filters
Clear Filters

Summing groups of ones

2 views (last 30 days)
Sonia Wiemann
Sonia Wiemann on 24 Apr 2012
If I have a list of ones and zeros....the ones are clustered together in groups....how can I ask the program to sum the ones within their groups?
  2 Comments
Oleg Komarov
Oleg Komarov on 24 Apr 2012
Can you provide an example of input and output?
William
William on 24 Apr 2012
This might be helpful: http://www.mathworks.com/matlabcentral/newsreader/view_thread/160813

Sign in to comment.

Accepted Answer

Image Analyst
Image Analyst on 24 Apr 2012
Just call regionprops (if you have the image Processing Toolbox):
numberOfOnesPerGroup = regionprops(yourArray, 'area');
One line and you're done. This will get you the area (number of touching elements) for each group (elements that all touch each other).
  3 Comments
Andrei Bobrov
Andrei Bobrov on 25 Apr 2012
numberOfOnesPerGroup = regionprops(~~yourArray(:), 'Area','PixelIdxList' )
numberOfZerosPerGroup = regionprops(~yourArray(:), 'Area','PixelIdxList' );
ons = [ones(numel(numberOfOnesPerGroup),1), cat(1,numberOfOnesPerGroup.('Area'))]
out = zeros(numel(numberOfOnesPerGroup)+numel(numberOfZerosPerGroup),2);
if numberOfOnesPerGroup(1).PixelIdxList(1) < numberOfZerosPerGroup(1).PixelIdxList(1)
out(1:2:end,:) = ons;
out(2:2:end,2) = cat(1,numberOfZerosPerGroup.('Area'));
else
out(2:2:end,:) = ons;
out(1:2:end,2) = cat(1,numberOfZerosPerGroup.('Area'));
end
Image Analyst
Image Analyst on 25 Apr 2012
Sonia: See that answer in your post about that question.

Sign in to comment.

More Answers (2)

Rick Rosson
Rick Rosson on 24 Apr 2012
y = cumsum(x);
d = x(2:end) - x(1:end-1);
k = ( d == -1 );
z = y(k);

Andrei Bobrov
Andrei Bobrov on 24 Apr 2012
x1 = [~x(1) x(:)' ~x(end)]
groupones = diff([strfind(x1,[0 1]);strfind(x1,[1 0])]);
variant
x1 = x(:);
k = find([true;diff(x1)~=0]);
out = [x1(k) diff([k,[k(2:end);numel(x1)+1]],1,2)]

Categories

Find more on Mathematics in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!