この記事は2020年09月22日に投稿しました。
目次
リンク
1. はじめに
こんにちは、iOSのエディタアプリPWEditorの開発者の二俣です。
今回は業務で使用しているC++/CLIで標準偏差を求める方法についてです。
2. C++/CLIで標準偏差を求める
C++/CLIで標準偏差を求めるには、以下のような手順で行います。
- 平均値を求めます。
- 各値の偏差(値 - 平均値)を求めます。
- 偏差の2乗を求めます。
- 分散(偏差の2乗の合計 / 値の数)を求めます。
- 分散の平方根を標準偏差として求めます。
実装例
#include <cmath> // sqrt()に必要です。 using namespace System; using namespace System::Collections::Generic; /** * @brief 平均値を取得します。 * * @param [in] valueList 値リスト * @return 平均値 */ double GetMean(List<double>^ valueList) { double sum = 0.0; for each (double value in valueList) { sum += value; } double result = sum / valueList->Count; return result; } /** * @brief 標準偏差を取得します。 * * @param [in] valueList 値リスト * @return 標準偏差 */ double GetStandardDeviation(List<double>^ valueList) { // 平均値を取得します。 double mean = GetMean(valueList); // 偏差の2乗の合計値を求めます。 double squareSum = 0.0; for each (double value in valueList) { // 偏差を求めます。 double deviation = value - mean; // 偏差の2乗を求めます。 double square = deviation * deviation; // 合計値に加算します。 squareSum += square; } // 分散を求めます。 double variance = squareSum / valueList->Count; // 標準偏差を求めます。 double result = std::sqrt(variance); return result; } [STAThreadAttribute] int main() { List<double>^ valueList = gcnew List<double>(); valueList->Add(1.24); valueList->Add(1.57); valueList->Add(1.88); valueList->Add(0.95); valueList->Add(2.01); double result = GetStandardDeviation(valueList); Console::WriteLine(result); }
実行結果
0.39370039370059
3. おわりに
業務で標準偏差を求める必要があり、その方法を調査しました。
数学はあまり詳しくないので、方法を教えてもらいその通りに実装しました。
リンク
紹介している一部の記事のコードはGitlabで公開しています。
興味のある方は覗いてみてください。
私が勤務しているニューラルでは、主に組み込み系ソフトの開発を行っております。
弊社製品のハイブリッドOS [Bi-OS][Bi-OS]は高い技術力を評価されており、特に制御系や通信系を得意としています。
私自身はiOSモバイルアプリやウィンドウズアプリを得意としております。
ソフトウェア開発に関して相談などございましたら、お気軽にご連絡ください。
また一緒に働きたい技術者の方も随時募集中です。
興味がありましたらご連絡ください。
EMAIL : info-nr@newral.co.jp / m-futamata@newral.co.jp
TEL : 042-523-3663
FAX : 042-540-1688