• 締切済み

共分散行列を求めるプログラム

マハラノビス距離の分布パラメータである共分散行列について考察しています。共分散行列を求めるプログラムを教えてください。

  • kynt
  • お礼率0% (0/2)

みんなの回答

  • wolv
  • ベストアンサー率37% (376/1001)
回答No.2

define K データ系列の数 define N 各系列の要素の数  : 途中略  : float data[K][N]; float kyobunsan[K][K]; int i,k1,k2; for(k1=0;k1<K;k1++)for(k2=0;k2<K;k2++){ /* *1 */  kyobunsan[k1][k2]=0;  for(i=0;i<N;i++){   kyobunsan[k1][k2]    +=data[k1][i]*data[k2][i];  /* *2 */  } } 共分散、正確なところは忘れたので、適当に書いてあります。*1,*2の行は共分散の定義にあうように適当に書き直してください。 また、プログラミングが苦手でもアルゴリズムはわかるように書いたつもりですが、プログラムとしては不完全なので適当に追加してください。

  • nonshin
  • ベストアンサー率0% (0/0)
回答No.1

なんとかなるって。

関連するQ&A

  • 分散共分散行列

    分散共分散行列 分散共分散行列とはどのような行列のことを言いますか? どのようなものが分散共分散行列であり、どのようなものが分散共分散行列なり得ないのかわからないので教えてもらえますか? たとえば    A=|1 1 |   |1 -1| B=|7 3| |3 7| の行列は分散共分散行列となりますか? できたら理由も教えてください。

  • 分散共分散行列とは?

    分散共分散行列のことを調べたのですが、参考になるものがあまり見つかりません。教えてください。 分散共分散行列とは、どのようなもののことを言うのでしょうか? また、どうしてその行列が分散を表しているのでしょうか? その、行列の行列式?が小さければ、分散が小さいといえるのでしょうか? 良く分からないので、詳しい方、ぜひぜひ教えてください。 よろしくお願いします。

  • 共分散行列と分散共分散行列の違いとはなんですか?

    共分散行列と分散共分散行列の違いとはなんですか? 現在、共分散行列について調べているのですが、分散共分散行列ばかりが引っかかって混乱しています。

  • 分散共分散行列のプログラム

    C言語での質問なんですが,平均値ベクトルはわかるんですけど,分散共分散行列の解がよくわかりません.わかる方是非教えてください.よろしくお願いします.

  • 多次元正規分布の分散共分散行列について

    p次元確率変数ベクトル X(i) が p次元正規分布 N(0,Σ) に従っているとき p次正方行列 A で X を一次変換した Y (Y=AX) が従う多次元正規分布の分散共分散行列はどうやって求めればよいでしょうか? 考え方だけでも良いのでおしえてください。 お願いします。

  • 共分散行列について教えて!

    共分散行列とはなんですか? 共分散行列はどうやって求めるんですか?

  • 共分散行列の求め方

    数個のデータから共分散行列を生成するプログラムを実装しようと 考えています。そこで、次のようなプログラムを書きましたが、 結果があっているかがわかりません。共分散行列の生成方法に 詳しい方がおられましたら、どうか教えて頂きたいと思います。 共分散行列生成に用いた式は Σ = E[(X-E[X])(X-E[X])^T]  です。 (Σ:共分散行列 X:データ E[X]:Xの平均 ^T:転置行列) double xave = 0.0; //式のE[x]にあたる部分 double work [ ]; //データを入れる一次元配列(式のXにあたる) double a[][]; //共分散行列を入れる配列 work[0] = 3; //5つのデータを格納 work[1] = -2; work[2] = 5; work[3] = -3; work[4] = 2; for(i = 0; i < N; i++){   //E[x]を求めるためにxaveに全要素合計を入れる xave += work[i]; } xave /= N;        //全要素合計をデータ数で割る for(i = 0; i < N; i++){   //要素Xから平均を引く(X-E[x]にあたる) work[i] -= xave; } for(i = 0; i < N; i++){ for(j = 0; j < N; j++){ a[i][j] = work[i]*work[j]/N;  //a[][]に値を格納 Nで割っているのは式の一番外側のEにあたる } } <実行結果> 0.0 | 0.0 | 0.0 | 0.0 | 0.0 0.0 | 4.0 | -6.0 | 8.0 | -8.0 0.0 | -6.0 | 9.0 | -12.0 | 12.0 0.0 | 8.0 | -12.0 | 16.0 | -16.0 0.0 | -8.0 | 12.0 | -16.0 | 16.0

  • 分散共分散行列の逆行列

    以下の行列を考えます. 行列X(M行N列,成分の値は分散1のガウスノイズ) 行列Xの分散共分散行列S(M行M列), 行列Sの逆行列Y(M行M列) N=M+1のときはN≠M+1のときに比べて行列Yの各成分の大きさがかなり大きくなる,という結果が得られました. (計算にはMATLABの関数covとpinvを用いました.) これは数学的に正しいことなのでしょうか. また,正しいとしたらどうしてこのようなことが起こるのでしょうか. 行列Yの計算結果の例を以下に示します.(行列Yを500回算出し,それらの平均値を示しています.) http://wisteria.orz.ne.jp/download/pinvcovX.jpg 縦・横方向の軸は行列Yのインデックスを,高さ方向の軸は行列Yの成分の値を示しています. 上述した現象の原因についてご教授いただけると幸いです.

  • 分散共分散行列と相関係数行列との違い

    分散共分散行列と相関係数行列との違いがわかりません。 どなたかご存知の方がおりましたら、教えていただきたくお願いします。

  • 共分散行列用データ

    共分散行列用データ 共分散行列を使わなければならない前提があるとして、そのデータを任意に作らなければならないのですが、どのように作成したらよいかが全く解りません。 書籍やHPの紹介でも良いので、宜しく御願い致します。

専門家に質問してみよう