2016-12-07 8 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 

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:

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