Find repeating rows in a matrix and replace with zeros
이전 댓글 표시
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?
채택된 답변
추가 답변 (1개)
Bruno Luong
2020년 11월 3일
편집: Bruno Luong
2020년 11월 3일
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
카테고리
도움말 센터 및 File Exchange에서 Image Arithmetic에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!