2016-12-07 14 views
2

행렬의 각 행에서 선행 0을 없애고 싶지만 한 번에 하나의 0을 제거하는 것으로 제한하십시오.MATLAB - 한 번에 하나씩 행렬의 각 행에서 선행 0을 제거 하시겠습니까?

이것은 현재 해결책이지만 더 간단한 방법이 있습니까?

a = [ 0 0 0 0 0 0 0 0 0 0 
     0 0 5 2 3 4 0 0 0 0 
     0 0 0 1 2 3 4 0 0 0 
     0 0 1 2 3 0 0 0 0 0 
     0 0 0 0 1 0 0 0 0 0 
     1 0 0 0 0 0 0 0 0 0 ] 

    b=zeros(size(a)); 
    for j=1:size(a,2) 
    for i=1:size(a,1) 
     temp=find(a(i,:),1,'first'); 
     candelete=min(2,temp); 
     b(i,1:end-candelete+1)=a(i,candelete:end); 
    end 
    a=b 
    end 

편집 :

0  0  0  0  0  0  0  0  0  0 
0  5  2  3  4  0  0  0  0  0 
0  0  1  2  3  4  0  0  0  0 
0  1  2  3  0  0  0  0  0  0 
0  0  0  1  0  0  0  0  0  0 
1  0  0  0  0  0  0  0  0  0 

두 번째는 2 0을 제거 할 것이다, 그래서 : 는 내가 처음 출력은 첫 번째 앞에 0이 제거 가질 수 있도록, 모든 반복을 인쇄 할거야 에 ...

답변

2

편집 :

: 지금 질문이 명확하게되었다, 여기 circshift를 사용하여 더 나은 대답 0
index = (a(:, 1) == 0) & any(a, 2); 
while any(index) 
    a(index, :) = circshift(a(index, :), -1, 2); 
    disp(a); 
    index = (a(:, 1) == 0) & index; 
end 
+0

감사합니다. 그러나 첫 번째 선행 제로 만 제거하여 행렬을 인쇄 할 수있는 방법이 있습니까? 나는 여러분의 솔루션에 이르기까지 모든 반복을 인쇄하기를 원합니다. – RootFAIL

+0

오, 알겠습니다 : a (i, :) = circshift (a (i, :), max (1-startIndex (i), - 1)) – RootFAIL

+1

@RootFAIL : 찾고. – gnovice