Find repeating rows in a matrix and replace with zeros
Show older comments
I have a large matrix (5683384x2 double) containing xy-coordinates of an ROI mask. If an xy-coordinate does not repeat enough times, I want to set the row to zeros.
For example if my matrix is [9 10; 9 10; 9 10; 9 10; 9 10; 7 12; 3 4; 3 4; 3 4; 3 4]. I want to replace rows that do not repeat 3 times, so [7 12] would become [0 0]. Is there any way to do this?
Accepted Answer
More Answers (1)
Bruno Luong
on 3 Nov 2020
Edited: Bruno Luong
on 3 Nov 2020
M = [9 10; 9 10; 9 10; 9 10; 9 10; 7 12; 3 4; 3 4; 3 4; 3 4; 7 12];
minlgt = 3; % keep all rows consecutively repeated at least minlgt times
i = find([true; any(diff(M,1,1),2); true]);
lgt = diff(i);
removed = lgt<minlgt;
M(repelem(i(removed),lgt(removed)),:) = 0
Categories
Find more on Image Arithmetic in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!