2016-06-13 6 views
1

Могу ли я обрезать ведущие нули в векторах [0 0 0 2 8 12], [0 1 0 0 0 0], [0 0 0 0 25 0], чтобы получить [2 8 12], [1 8 0 3 0], [25 0] с той же функцией? Есть ли способ сделать это, не используя петлю while? (Или любой другой вид петли?)Удалить ведущие нули из вектора в Matlab

Я намерен превратить вектор в строку, такую ​​как «2h 8m 12s», «1mo 8d 0h 3m 0s», «25m 0s», если это откроет любые двери ,

+8

'v = [0 0 0 2 8 12]; result = v (find (v, 1): end) '? Или, если вы чувствуете себя странно, 'result = v (logical (cumsum ((logical (v)))));' –

+1

Почему бы не написать алгоритм преобразования строк таким образом, чтобы обрезка не нужна? Кажется, что это может быть более простой алгоритм для записи, чем для форматирования выходов в зависимости от длины входного вектора. – excaza

+1

Как создать объект 'datetime', а затем преобразовать его в строку с помощью' datestr() '? – Jommy

ответ

2

Как упоминание @ Luis Mendo find() сделает трюк.

a=[0 0 0 2 8 12]; 
b=[0 1 8 0 3 0]; 
c=[0 0 0 0 25 0]; 

a_short = a(find(a>0,1):end); 
b_short = b(find(b>0,1):end); 
c_short = b(find(c>0,1):end); 

"> 0" часть в находке() не является необходимым, но я чувствую, что это помогает относительно читаемости

+1

Часть '> 0' может на самом деле быть вредной, если вектор имеет отрицательные элементы. Это должно быть '~ = 0' (или оставить его) –

Смежные вопросы