[解決済み] C++で標準偏差と分散を計算する
2022-03-06 01:43:39
質問
さて、何度か投稿していますが、以前は悩みがかなり漠然としていました。今週からC++を始めて、ちょっとしたプロジェクトをやっています。
私は標準偏差 & 分散を計算しようとしています。私のコードは100個の整数のファイルをロードして配列に入れ、それらをカウントして、平均、合計、分散、SDを計算します。しかし、分散については少し問題があります。
巨大な数字が表示されるのですが、これは計算に関係があるような気がしています。
平均値や合計値は大丈夫なのですが。
NBです。
using namespace std;
int main() {
int n = 0;
int Array[100];
float mean;
float var, sd;
string line;
float numPoints;
ifstream myfile("numbers.txt");
if (myfile.is_open()) {
while (!myfile.eof()) {
getline(myfile, line);
stringstream convert(line);
if (!(convert >> Array[n])) {
Array[n] = 0;
}
cout << Array[n] << endl;
n++;
}
myfile.close();
numPoints = n;
} else
cout << "Error loading file" << endl;
int sum = accumulate(begin(Array), end(Array), 0, plus<int>());
cout << "The sum of all integers: " << sum << endl;
mean = sum / numPoints;
cout << "The mean of all integers: " << mean << endl;
var = (Array[n] - mean) * (Array[n] - mean) / numPoints;
sd = sqrt(var);
cout << "The standard deviation is: " << sd << endl;
return 0;
}
解決方法は?
蹄鉄の回答が示すように、分散を計算するためにループを使用する必要があります。
<ブロッククオートvar = ((Array[n]-平均) * (Array[n] - 平均)) / numPoints;
は、配列から1つの要素を考慮するだけです。
horseshoeさんの提案したコードを改良しただけです。
var = 0;
for( n = 0; n < numPoints; n++ )
{
var += (Array[n] - mean) * (Array[n] - mean);
}
var /= numPoints;
sd = sqrt(var);
ループを使わなくても、あなたの合計はうまくいきます。 アキュムレート 関数はすでにループを内包していますが、コード上では明らかにはなっていないので、同等の動作をする アキュムレート が何をやっているのかを明確に理解するために。
注
X ?= Y
は
X = X ? Y
ここで
?
は任意の演算子でよい。
また
pow(Array[n] - mean, 2)
を使うと、掛け算ではなく、二乗を取るので、より整然とした表現になります。
関連
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み】'cout'は型名ではない
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む
-
[解決済み] iostream::eof がループ条件の中 (つまり `while (!stream.eof())`) にあるのはなぜいけないとされているのでしょうか?