2017-01-16 33 views
0

this matlab postでは、「ループ消去ランダムウォーク」ベクトル問題の解決策を見つけることができます。この問題は「ループを消去する」ことです。これは、整数の繰り返しの間に整数を取り除くことを意味します。平面ループ消去ランダムウォーク(matlab)

例:

v=[3 1 4 6 7 9 1 22 87 33 35 36 37 35 34] becomes [3 1 22 87 33 35 34]. 

どのように2列の行列(平面の場合)と同じ問題を解決することができますか?

v=[1 1; 2 1; 2 2; 2 3; 3 3; 3 2; 2 2; 2 3; 2 4] should be [1 1; 2 1; 2 2; 2 3; 2 4] 
+0

添字をインデックスに変換し、リンクされたソリューションを私たちに教えてください。 – beaker

+0

問題の定義について質問があります。 1次元ベクトル(簡略化のため)に制限すると、入力[1,2,3,4,3,5,4]の出力はどのようになるでしょうか。出力は[1,2,3]または[1,2,3,5,4]ですか?上記の解決方法は前者の結果になりますが、後のIMOを出力する方が理にかなっています。 – aksadv

答えて

0

質問でリンクしたスレッドの回答の1つは、1次元ベクトルの問題を解決します。 2-D配列は、実世界から複雑な変換を使用して1-Dの複素ベクトルに変換することができます。

:最後に、入力行列から選択された行を選択

off = false; % Faster to call function FALSE once 
n = length(u); 
use = true(1, n); 
i = 1; 
while i <= n 
    multi = find(u(i:n) == u(i), 1, 'last'); 
    use((i + 1):(i + multi - 1)) = off; 
    i = i + multi; 
end 

what's published hereから些細な変更を加えて1次元問題の

v=[1 1; 2 1; 2 2; 2 3; 3 3; 3 2; 2 2; 2 3; 2 4]; 
% from your example. note the change in variable name. 

% convert the 2-D array into 1-D using real-imag to complex trasnform 
u = v*[1;i]; 

ソリューション:したがって、以下では溶液とすることができます

v = v(use,:) 
% [1 1; 2 1; 2 2; 2 3; 2 4] 
+0

ありがとうございます。 1dの複雑なフォーマットへの2d変換は、平面的な解を見つけるためのエレガントな方法です。あなたの最初のコメントに関して、期待される出力はもちろん[1,2,3,5,4]です。 – sapienz