2016-12-07 5 views
2

行列の各行に先行ゼロを取り除きたいが、一度に1つをゼロにすることに制限する。MATLAB - 行列の各行の先行ゼロを1つずつ取り除きますか?

これは私の現在の解決策ですが、これを行う簡単な方法はありますか?

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 

EDIT: 最初の出力のみ、最初の先行ゼロが削除されますように、私は、すべての反復を印刷したいよ:

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つのゼロが削除されている、とそうなります上の...

答えて

2

EDIT:

今すぐ質問が明らかになったことを、ここに 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、:) =循環シフト(a(i、:)、max(1-startIndex(i)、 - 1)) – RootFAIL

+1

@RootFAIL:私はあなたの更新答えがあなただと思う探している。 – gnovice

関連する問題