プログラムを書こう!

実務や自作アプリ開発で習得した役に立つソフトウェア技術情報を発信するブログ

C++/CLIで標準偏差を求める

この記事は2020年09月22日に投稿しました。

f:id:paveway:20190914064630j:plain

目次

  1. はじめに
  2. C++/CLIで標準偏差を求める
  3. おわりに

1. はじめに

こんにちは、iOSのエディタアプリPWEditorの開発者の二俣です。
今回は業務で使用しているC++/CLIで標準偏差を求める方法についてです。

目次へ

2. C++/CLIで標準偏差を求める

C++/CLIで標準偏差を求めるには、以下のような手順で行います。

  1. 平均値を求めます。
  2. 各値の偏差(値 - 平均値)を求めます。
  3. 偏差の2乗を求めます。
  4. 分散(偏差の2乗の合計 / 値の数)を求めます。
  5. 分散の平方根を標準偏差として求めます。

実装例

#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

目次へ