C#による 分位数

C#によるサンプルソースコード : 使用関数名:g01am

Keyword: 分位数, 高速

概要

本サンプルは分位数を求めるC#によるサンプルプログラムです。 本サンプルは以下に示される並べ替えのされていないベクトルについて高速のアルゴリズムを用いて特定の分位数を求め、出力します。

分位数のデータ 

※本サンプルはnAG Library for .NETに含まれる関数 g01am() のExampleコードです。本サンプル及び関数の詳細情報は g01am のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで

入力データ

(本関数の詳細はg01am のマニュアルページを参照)

このデータをダウンロード
g01am Example Program Data
11 3                                        : N and NQ
4.9 7.0 3.9 9.5 1.3 3.1 9.7 0.3 8.5 0.6 6.2 : The N data values
0.25 0.5 1.0                                : The NQ required quantiles

  • 1行目はタイトル行で読み飛ばされます。
  • 2行目にベクトルの要素の数(n)と分位の数(nq)を指定しています。
  • 3行目にベクトルの要素(rv)を指定しています。
  • 4行目に3個の分位(q)を指定しています。

出力結果

(本関数の詳細はg01am のマニュアルページを参照)

この出力例をダウンロード
g01am Example Program Results

 Data Values:

 4.90 7.00 3.90 9.50 1.30 3.10 9.70 0.30 8.50 0.60 6.20

 Quantile     	Result

     0.25           2.20
     0.50           4.90
     1.00           9.70

  • 5行目にデータの値が出力されています。
  • 9から11行目に分位と分位数の値が出力されています。

ソースコード

(本関数の詳細はg01am のマニュアルページを参照)

※本サンプルソースコードは .NET環境用の科学技術・統計計算ライブラリである「nAG Library for .NET」の関数を呼び出します。
サンプルのコンパイル及び実行方法


このソースコードをダウンロード
//      g01am Example Program Text
//      C# version, nAG Copyright 2008
using System;
using NagLibrary;
using System.IO;
namespace NagDotNetExamples
{
  public class G01AME
  {
    static bool defaultdata = true;
    static string datafile = "";
    static void Main(String[] args)
    {
      if (args.Length == 1)
      {
        defaultdata = false;
        datafile = args[0];
      }
      StartExample();
    }
    public static void StartExample()
    {
      try
      {
        DataReader sr = null;
        if (defaultdata)
        {
          sr = new DataReader("exampledata/g01ame.d");
        }
        else
        {
          sr = new DataReader(datafile);
        }
        int i,  n,  nq; int ifail;
        Console.WriteLine("g01am Example Program Results");
        //      Skip heading in data file
        sr.Reset();
        //      Read in problem size and check array sizes
        sr.Reset();
        n = int.Parse(sr.Next());
        nq = int.Parse(sr.Next());
        if (n < 1 || nq < 1)
        {
          Console.WriteLine("   ** Problem size is too small.");
          return;
        }
        //      Read in rest of the data
        double[] q = new double[nq];
        double[] qv = new double[nq];
        double[] rv = new double[n];
        sr.Reset();
        for (i = 1; i <= n; i++)
        {
          rv[i - 1] = double.Parse(sr.Next());
        }
        sr.Reset();
        for (i = 1; i <= nq; i++)
        {
          q[i - 1] = double.Parse(sr.Next());
        }
        //      Display the data
        Console.WriteLine("");
        Console.WriteLine(" {0}", "Data Values:");
        Console.WriteLine("");
        for (i = 1; i <= n; i++)
        {
          Console.Write(" {0,4:f2}", rv[i - 1]);
        }
        Console.WriteLine("");
        //      Call nAG method
        G01.g01am(n, rv, nq, q, qv, out ifail);
        if (ifail != 0)
        {
          Console.WriteLine("** g01am failed with ifail = {0,5}", ifail);
          return;
        }
        //      Display the results
        Console.WriteLine("");
        Console.WriteLine(" {0}", "Quantile     \tResult");
        Console.WriteLine("");
        for (i = 1; i <= nq; i++)
        {
          Console.WriteLine("  {0,7:f2}        {1,7:f2}", q[i - 1], qv[i - 1]);
        }
        //
      }
      catch (Exception e)
      {
        Console.WriteLine(e.Message);
        Console.WriteLine( "Exception Raised");
      }
    }
  }
}


関連情報
Privacy Policy  /  Trademarks