2016-11-06 28 views
0

私はプログラムを作成しています。私はこのsample = [0; 0; 0; 1; 1; 1 ; 0]に似たベクトルを反復処理する必要があります。私はアキュムレータでループを使用して新しい2次元配列を構築することを考えていました。ここで、列1はいくつの0または1が現れ、列2はどのトークンであるかです。しかし、私はmatlabの構文と私は主にスライスを参照してドキュメントをチェックして新人です。新しいマトリックスの構築に関するアイデアは大歓迎です。matlabでベクターを反復処理する

arr = [0; 0; 0; 1; 1; 1; 0]; 
    tokenizeSignal(arr) 
    ans = 
    3 0 
    3 1 
    1 0 
+0

入力例データの出力として見たいものの例を挙げてください。 –

+0

さて、私は質問を更新します –

答えて

2

以下

サンプルベクトルと出力提案戦略(配列のみが1と0が含ま):

ARRアレイ全体にわたって

初期化2つのカウンタ

count_0 = 0; 
count_1 = 0; 

反復

arr = [0; 0; 0; 1; 1; 1; 0]; 
[n,m] = size(arr); %m is espected equal to 1 

y = arr[1,1]; %first element of the array, we need a reference 

スタートループと現在の要素を読ん

for i=1:n 
    x = arr[i,1]; 

最後の要素はゼロまたは1

if (x == 0 && y == 0) 
    count_0 = count_0 + 1; 
    count_1 = 0; 
    else if (x == 1 && y == 1) 
    count_1 = count_1 + 1; 
    count_0 = 0; 
    end 

印刷した場合は、最後のグループからどのように多くのゼロまたはどのように多くのものをカウントするたびに開始値は、値(最後の「配列」の用語)

if (x != arr[1,i+1] && count_1 > 0 && i<n) 
    print(count_1, '1'); 
    else if (x != arr[1,i+1] && count_0 > 0 && i<n) 
    print(count_0, '0'); 
    end 

アップデートを変更し、ループ

のクローズしますサイクルのうち3210
y = x; 
end 

、もちろん最後の時間を印刷

if (count_1 > 0) 
print(count_1, '1'); 
else if (count_0 >) 
print(count_0, '0'); 
end 

あなたが適切な配列に格納値で印刷を変更することができます。

+0

うわー、そのような包括的な答えをありがとう。これは素晴らしいことです - 私が持っていた他の質問にも答えました。 –

+0

@the_martianよろしくお願いします!あなたの配列が0で始まっていても効果がなかった小さなエラーを編集しました。すべてのコードが正しいはずです。問題が発生した場合は、コードを再度更新します。 – marcoresk