ページ 11

配列の要素の分散の求め方 php言語

Posted: 2014年4月02日(水) 14:21
by あい
はじめまして。

例えば3つの配列 [1,2,3] [2,4,5] [6,2,5] があるとして、これらの要素の分散を求めるプログラムが知りたいです。

これら3つの配列の平均は[3,2.66,4.33]になると思います。 そして分散なのでこの平均を出した配列ともとの3つの配列をつかって

分散を[a,b,c] のように配列として出したいのですが、どのようにやるのでしょうか?

どなたかお願いいたします。

Re: 配列の要素の分散の求め方 php言語

Posted: 2014年4月02日(水) 14:25
by milfeulle
はじめまして! 配列の全ての要素の分散を求めたいのですね。ところで平均値はどうやって求めたのでしょう? 平均値が求められれば分散も少し帰るだけでできると思います。まずはどこまでプログラムを書いて、どこまでできて、どこで躓いてしまったのか教えて頂けるとお答えしやすいと思います。

Re: 配列の要素の分散の求め方 php言語

Posted: 2014年4月02日(水) 14:41
by あい
ご返信ありがとうございます。

恥ずかしながら平均を求める段階でつまずいてしまっている段階でプログラムをかけていない状況です。。

配列の分散となるとどのように進めてよいのかもわからない段階です。。 

もとの配列はfile_get_contentsで取得したxmlファイルのものを使用したいのですが。

$array1  = file_get_contents("xmlファイル");
$array2 = file_get_contents("xmlファイル");
$array3 = file_get_contents("xmlファイル");

このように配列ファイルを取得してからのプログラムがわからない状況です。

よろしくお願いしたいです。

Re: 配列の要素の分散の求め方 php言語

Posted: 2014年4月02日(水) 14:52
by milfeulle
つまり、
1. 1つのXMLファイルを読み込み、
2. 数値の配列に変換し、
3. 配列の平均値を求め、
4. それを利用して分散を求める
わけですね。

となるとこれらを順番に解決しなければなりませんが、まずはそのXMLの例を示して下さい。どのようなXMLになっているのか、数値は3個だけなのか、XMLファイルは1種類だけなのか、XMLファイルではないといけないのか、などです。

申し訳ありません。PHPには詳しくないのですが、file_get_contents関数はファイルを文字列として取得するものだと思いますが、自動的に配列になってくれるのでしょうか? (「php XML」で検索するといろいろ例が出てきます。)

Re: 配列の要素の分散の求め方 php言語

Posted: 2014年4月02日(水) 15:15
by あい
xml ファイルは以下のようになっております

[例:example.xml]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<real>0.23593497276306152</real>
<real>0.45295000076293945</real>
<real>0.26988601684570312</real>
</array>
</plist>

このような数値が3個のxmlファイルを3つ読み込みます。 
 
$array1  = file_get_contents("example.xml");

$doc1 = new DOMDocument();
$doc1->loadXML($array1);

$items1 = $doc1->getElementsByTagName("real");
$array1 = [];

foreach ($items1 as $node){

$item_array1[] = $node->nodeValue;
}

配列には上記のように格納しているの流れとなっております。

この流れをxmlファイル3つに適応し、xmlファイルを配列にいれています。

この先で分散を求めたいのですが全くわからない状況です。。

よろしくおねがいします。

Re: 配列の要素の分散の求め方 php言語

Posted: 2014年4月02日(水) 15:19
by みけCAT
まず、1個の配列に格納されている数値の分散を求めることはできますか?
例えば、[1,2,3]という配列が与えられたとき、このデータの分散0.67を求めることはできますか?

Re: 配列の要素の分散の求め方 php言語

Posted: 2014年4月02日(水) 15:26
by あい
ご返信ありがとうございます

配列内の分散でしたらstats_variance をつかえばいいのでしょうか?

Re: 配列の要素の分散の求め方 php言語

Posted: 2014年4月02日(水) 15:38
by みけCAT
PHP: stats_variance - Manual
これを使うと応用が効かなそうなので、できればライブラリを使わず自分で計算するプログラムを実装してみてください。

Re: 配列の要素の分散の求め方 php言語

Posted: 2014年4月02日(水) 15:53
by あい
$average=0;
foreach($array1 as $value)
{
$average += $value;
}

$average =($average/count($array));
return $average;

....

}

平均までは求められますが、ここから分散を求めるのができないです。。

Re: 配列の要素の分散の求め方 php言語

Posted: 2014年4月02日(水) 15:57
by みけCAT
分散の(数学的な)求め方がわからないですか?
それとも、分散の求め方はわかるが、それをプログラムにできないですか?

Re: 配列の要素の分散の求め方 php言語

Posted: 2014年4月02日(水) 16:34
by あい
分散の求め方はわかるのですが、それをプログラムに直すのがどうしてもできないです。。

お手数かけ手申し訳ありません、

Re: 配列の要素の分散の求め方 php言語

Posted: 2014年4月05日(土) 13:05
by あい
どなたかよろしくお願いしたいです。

Re: 配列の要素の分散の求め方 php言語

Posted: 2014年4月05日(土) 16:05
by Poco
分散って2種類の平均の差なので、平均を求められて分散が分からない理由が分かりません。
二乗の平均をA、平均をBとすると、分散Vは
 V=A-B*B
で求めることができるのですが。

Re: 配列の要素の分散の求め方 php言語

Posted: 2014年4月05日(土) 18:46
by ISLe
n番目の要素ごとに分散を求める方法が分からないという話ですよね。
foreachで回していてnがどこだか分からないということだと思いますが。