2011-12-09 2 views
2

私の特定の問題にはMatlabを使うのはナンセンスか、それとも何人かは似たようなことをするかどうか聞かせてください。matlabがうまくいく問題

私は最初の配列S(1)を持っています。各項は2次元の点です。 新しい用語ポイント を連続する2つの用語ポイントp(i)p(i+1)の間に挿入して、新しいシーケンスS(2)を作成します。 ここで、pは、S(2)に最も近いインデックスの4つのタームポイントのfの関数です。すなわち 、

p= f(p(i-1),p(i),p(i+1),p(i+2)) 

と機能fはなく、行列言語の純粋なスタイルでスタイル のようにCで書かれています。 同じように、新しい長いシーケンスS(i+1)を最大でS(m)まで繰り返しています。

上記は曖昧な場合がありますが、何かアドバイスをお願いします。 Matlabが問題の最良の選択肢であるかどうかは尋ねませんが、そのような問題や意思決定に専門家がMatlabを使用するかどうかは問いません。

ありがとうございます。

答えて

2

これは大きくfに依存します。 fがMatlabで効率的にコーディングできる場合、またはMEX it(Matlab C拡張)に時間を費やしたい場合、Matlabは効率的に動作します。

コードは次のようにベクトル化することができます

f = @(x) mean(x,3); 
m=3; 
S{1}=[1,2,3;4,5,6]; 
for i=2:m 
    S{i} = cat(3,... 
     [[0;0] S{i-1}(:,1:end-2)],... 
     S{i-1}(:,1:end-1),... 
     S{i-1}(:,2:end),... 
     [S{i-1}(:,3:end) [0;0]]); 
    S{i} = [f(S{i}) [0;0]]; 
    S{i} = cat(3,S{i-1},S{i}); 
    S{i} = permute(S{i},[1 3 2]); 
    S{i} = S{i}(:,:); 
    S{i}(:,end)=[]; 
end 
+0

、ありがとうございます。 –

1

はい、Matlabはこのようなタスクに適しているようです。シーケンスのリストのデータ構造については、cell arraysの使用を検討してください。 Sをセル配列として持つことができます。S{1}S(1)に対応し、ポイントのセル配列、またはポイントが単なるペアまたは3倍の数である場合は通常のマトリックスになります。

私の意見では、Pythonはすべての種類のシーケンスに当てはまると特に魅力的です。

+0

、どうもありがとうございました。 –

関連する問題