sum only consecutive 1's in matrix

1 次查看（过去 30 天）
C.G.2021-10-20

I have a matrix of data where I want to go down each column in the matrix, and sum the occurences where 1's occur consectively. E.g. if I have
1
0
1
1
0
1
1
I want this to be recorded as 1,2,2 as the groups of 1's are separated by 0's. I want this data to be stored in a new matrix where the sum data for each column is stored in a column (in the same format as the orignal data).
Is this possible?

采纳的回答

Image Analyst 2021-10-20
This will do it:
particleNotMoved = s.particleNotMoved
% Prepare a matrix to hold our output -- the run lengths.
[rows, columns] = size(particleNotMoved)
output = zeros(floor(rows/2), columns)
% Loop over all columns, getting the run lengths of each run.
for col = 1 : columns
% Use regionprops in the Image Processing Toolbox.
props = regionprops(logical(particleNotMoved(:, col)), 'Area');
% Get the run lengths for this column.
runLengths = [props.Area]';
% Insert result for this column into our output array.
output(1:numel(runLengths), col) = runLengths;
end
C.G. 2021-10-20
Ok thank you

更多回答（1 个）

Matt J 2021-10-20
See,
Tools for Processing Consecutive Repetitions in Vectors
[~,~,runlengths]=groupLims(groupTrue(particleNotMoved),1)
2 个评论显示隐藏 1更早的评论
Matt J 2021-10-20
An easy modification.
X=particleNotMoved;
X(end+1,:)=0;
[starts,~,runlengths]=groupLims(groupTrue(X(:)),1);
[~,G]=ind2sub(size(X),starts);
result = splitapply(@(x) {x}, runlengths,G )

Community Treasure Hunt

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

Start Hunting!