2011-11-21 11 views
0

私は2つの行列を計算しようとしていますが、そのうちの1つは400 * 2で、もう1つは20 * 20です。最初のものには400点のx座標とy座標が含まれ、2列目には400点あり、xは2nd(i、i)、yは(i、k)です。iとkは20の数カウンターです。それらの2つの行列点の間の距離は私に400 * 400の行列を与えます。私が使用しているコードは次のとおりです。インデックス行列Matlab

for i=1:20 
    for j=1:400 
     for k=1:20 
     L(j,)=sqrt((C(j,1)-M(i,i))^2+(C(j,2)-M(k,i))^2); 
     end 
    end 
end 

Cが第1の行列であり、Mが第2の行列である。今私はそれを少し難しくしたことを知っているが、問題は私がL(j、)その部分に与えるためにカウンターを見つけることができない。皆さんにお気軽にお聞かせください。

編集:まずは2点のベクトルがあると思います。 Xは-0.95:0.1:0.95で、yは同じです。 Mベクトルは、すべてのxがYとペアになっているので、20 * 20の行列または400 * 2になりますが、400 * 2のように動作させることができないので、20 * 20になります。行列は少しです私がMの索引付けをしていることを示しています。あなたがそれらをペアにするより良い方法を持っていれば、私もそれに感謝します。

私の行列は次のようになります。

-0.95 -0.85 -0.75... 
-0.95 -0.85 -0.75 ... 
. 
. 
. 
+1

私は、あなたが行列のいくつかの部分の実際の例を含めると、より理解しやすいだろうと思います。 –

+2

行列* M *の説明は明確ではありません。エントリの内容を明確にしてください。 – Phonon

答えて

0

どのような順番で問題がありますか?私はあなたがを知っている限り、そうではないと仮定しています。その順序は何ですか。私は何だろうことはあり forループの多くを使用すると、「MATLABスタイル」ではありません...上記のコードは非常に遅くする必要があります

for i=1:20 
    for j=1:400 
     for k=1:20 
      L(j,(i-1)*20+k) = sqrt((C(j,1)-M(i,i))^2+(C(j,2)-M(k,i))^2); 
     end 
    end 
end 
+0

それはあなたに大きな助けの仲間でしたありがとう! –

3

Mdiag=repmat(diag(M)',20,1); 
L=pdist2(C,[Mdiag(:) M(:)]); 
私はこれを使用したいです

最初の行はMの対角項を抽出し、それらを繰り返す。

その後、[Mdiag(:) M(:)]は、2番目のポイントセットの標準形式です。

pdist2は、すべてのペアごとの距離を計算する関数です。

関連する問題