Extracting the first contiguous values without looping
조회 수: 2 (최근 30일)
이전 댓글 표시
Hi everyone,
I need to make a decision based values in a matrix and would like to avoid nested loops. I used arrayfun to produce a matrix of boolean values, but am only interested in the first set of contiguous truths . So, for example, if:
A = [ 1 1 0 0 1 1;
0 0 1 1 1 0;
1 0 1 1 0 0;
0 0 1 1 1 1]
B = [ 1 1 0 0 0 0; % first two bits retained
0 0 1 1 1 0; % unch
1 0 0 0 0 0; % only first bit retained
0 0 1 1 1 1] % unch
The options I've come up with are a bit caddy-whompus and are row-based, so they're no good. These involved (1) casting / strfind or (2) find (first 1 in B, then subsequent 0 in ~B).
Any suggestions?
Regards,
Noel
댓글 수: 0
채택된 답변
Azzi Abdelmalek
2014년 3월 24일
편집: Azzi Abdelmalek
2014년 3월 24일
A = [ 1 1 0 0 1 1;
0 0 1 1 1 0;
1 0 1 1 0 0;
0 0 1 1 1 1]
B=diff(A,[],2)
[n,m]=size(A);
idx=arrayfun(@(x) min([find(B(x,:)==-1,1)+1 m+1]),1:n)
for k=1:n
A(k,idx(k):end)=0
end
%Or
A = [ 1 1 0 0 1 1;
0 0 1 1 1 0;
1 0 1 1 0 0;
0 0 1 1 1 1]
B=diff(A,[],2)
[n,m]=size(A);
idx=arrayfun(@(x) min([find(B(x,:)==-1,1)+1 m+1]),1:n)
ii=cell2mat(arrayfun(@(x) [idx(x):m;x*ones(1,m-idx(x)+1)],1:n,'un',0))
jj=sub2ind(size(A),ii(2,:),ii(1,:))
A(jj)=0
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Annotations에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!