2016-06-13 14 views
1

ベクトル[0 0 0 2 8 12]、[0 1 8 0 3 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 2 8 12]に関してのに役立つような気が。結果= v(find(v、1):end) '?あるいは、あなたが気になる人は、 'result = v(論理(cumsum(論理(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'でなければなりません(またはそのままにしておきます) –

関連する問題