2016-12-07 48 views
2

我想摆脱矩阵的每一行中的前导零,但限制它一次删除一个零。MATLAB - 摆脱每行矩阵中的前导零,一次一个?

这是我目前的解决方案,但有没有更简单的方法呢?

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去掉,等上...

回答

2

编辑:现在的问题得到澄清,这是一个使用circshift一个更好的答案:

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

相关问题