行列の分散について

現在、画像の輝度値の分散を求めることを目標に勉強しており、分散値を求めるvar関数について知りました。 そこで、ドキュメンテーションで調べていたら、行列の分散で以下のようなプログラムが記載されていました。

A = [4 -7 3; 1 4 -2; 10 7 9]; var(A)

ans = 1×3

   21.0000   54.3333   30.3333

これはどのような計算手順で求め、先のような答えになったのか分からないです。 ちなみに、分散の定義については理解しており、行列での求め方に困っている状態です。 分かる方ご教示願います。

 Risposta accettata

Hirokazu Tanaka
Hirokazu Tanaka il 1 Ott 2018

0 voti

var 関数や sum 関数もそうですが、行列に対して計算する場合には、基本的には縦方向、すなわち各列に対してそれぞれ計算します。

 A = [4 -7 3; 1 4 -2; 10 7 9];
 var(A)

と計算した場合には、[4,1,10] の分散、[-7,4,7] の分散、[3,-2,9] の分散がそれぞれ計算されています。

定義自体は https://jp.mathworks.com/help/matlab/ref/var.html の下部にあります。

4 Commenti

Hirokazu Tanaka
Hirokazu Tanaka il 1 Ott 2018

行列に含まれる数値全部を使って分散を計算したい場合は

 var(A(:))
Taiki Murakawa
Taiki Murakawa il 1 Ott 2018
回答ありがとうございます。 求め方について理解することができました。
また、もう一点質問させていただきたいのですがよろしいでしょうか。 コメントで記載されていた var(A(:))を打つとエラーが出てきます。 以下にそのプログラムを示します。
>> A=imread('sample.PNG'); >> var(A(:)) エラー: var (line 66) データ型が無効です。最初の入力引数は single または double でなければなりません。
sample.PNGを読み込んで、輝度値の行列を確認しました。 しかし、次にvar関数を用いようとするとエラーが発生します。 お時間がありましたら、ご教示願います。
Hirokazu Tanaka
Hirokazu Tanaka il 1 Ott 2018
Modificato: Hirokazu Tanaka il 1 Ott 2018
最初の入力引数は single または double でなければなりません。
とのエラーメッセージを転記頂いている通り、A が single型あるいはdouble型の数値でないことが原因かと。恐らく、、整数型で読み込まれているのではと推測していますが、
whos A
と実行するとデータ型を確認できますので、一応確認してみてください。
もし double 型に変換して分散を計算するのであれば、
Ad = double(A);
var(Ad(:))
でいけるかと思います。
ふと検索してみたところ、Image Processing Toolbox は画像データのための関数があるようです。もし Image Processing Toolbox も使えるようでしたら見てみてください。
Taiki Murakawa
Taiki Murakawa il 2 Ott 2018
回答ありがとうございます。 無事に分散を求めることができました。 Image Processing Toolboxの方に関しては、もう少し検討させていただきます。
この回答を採用させていただきます。 本当にありがとうございました。

Accedi per commentare.

Più risposte (0)

Categorie

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!