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

РЕДАКТИРОВАТЬ: я хочу печатать каждую итерацию, чтобы в первом выводе был удален только первый начальный ноль:

 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 нуля и так далее...


person RootFAIL    schedule 07.12.2016    source источник


Ответы (1)


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
person gnovice    schedule 07.12.2016
comment
Спасибо, но есть ли способ напечатать матрицу только с удалением первого начального нуля? Я хочу, чтобы он печатал каждую итерацию, вплоть до вашего решения. - person RootFAIL; 08.12.2016
comment
о, я понял: a(i, :) = circshift(a(i, :), max(1-startIndex(i),-1)) - person RootFAIL; 08.12.2016
comment
@RootFAIL: я думаю, что мой обновленный ответ - это то, что вы ищете. - person gnovice; 08.12.2016