SLLIB + SFITSIO ダイジェスト版 HTML マニュアル

使用頻度の高い API について,主要な内容を記述した, ビギナー向けのリファレンスマニュアルです.

SLLIB クラス: ストリーム / 文字列 / 文字列配列 / 文字列連想配列 / 多次元配列
SLLIB クラス用関数: 多次元配列用の統計用関数 / 多次元配列用の数学関数 / 多次元配列用の複素関数
SLLIB クラス以外: 定数・型の定義 / C99互換の複素数・複素関数
SFITSIO クラス: fitscc / fits_hdu / fits_image / fits_table / fits_table_col / fits_header / fits_header_record
SFITSIO クラス以外: 関数 / 定数・型の定義 / FITSファイルの部分読み出し機能 / FITSテンプレート / 規約外FITS拡張

SLLIB: 多次元配列用の統計用関数

多次元配列を扱うための mdarray クラスとその継承クラス では,配列に対して LIBC の math.h と同名の数学関数, C99 の complex.h と同名の複素関数統計用関数 を使う事ができます.

ヘッダファイルnamespace
#include <sli/mdarray_statistics.h> sli

関数一覧

すべて inline 関数ですので, コードはヘッダファイルに記述されています. コードの検証や流用が簡単です.

歪度,尖度の算出には (N-1) で割る定義,N で割る定義があります. 引数 minus1 には, 前者の定義を使う場合には true を, 後者の定義を使う場合には false をセットしてください.

関数プロトタイプ機能
double md_total( const mdarray &obj ); 全要素の合計値を取得
mdarray md_total_x( const mdarray &obj ); x方向で合計値を計算し,x方向の長さが1の配列を取得
mdarray md_total_y( const mdarray &obj ); y方向で合計値を計算し,y方向の長さが1の配列を取得
mdarray md_total_z( const mdarray &obj ); z方向で合計値を計算し,z方向の長さが1の配列を取得
mdarray md_total_small_z( const mdarray &obj ); z方向で合計値を計算し,z方向の長さが1の配列を取得 (高速)
double md_mean( const mdarray &obj ); 全要素の平均値を取得
mdarray md_mean_x( const mdarray &obj ); x方向で平均値を計算し,x方向の長さが1の配列を取得
mdarray md_mean_y( const mdarray &obj ); y方向で平均値を計算し,y方向の長さが1の配列を取得
mdarray md_mean_z( const mdarray &obj ); z方向で平均値を計算し,z方向の長さが1の配列を取得
mdarray md_mean_small_z( const mdarray &obj ); z方向で平均値を計算し,z方向の長さが1の配列を取得 (高速)
double md_meanabsdev( const mdarray &obj ); 全要素の平均絶対偏差を取得
mdarray md_meanabsdev_x( const mdarray &obj ); x方向で平均絶対偏差を計算し,x方向の長さが1の配列を取得
mdarray md_meanabsdev_y( const mdarray &obj ); y方向で絶対平均偏差を計算し,y方向の長さが1の配列を取得
mdarray md_meanabsdev_z( const mdarray &obj ); z方向で絶対平均偏差を計算し,z方向の長さが1の配列を取得
double md_variance( const mdarray &obj ); 全要素の分散を取得
mdarray md_variance_x( const mdarray &obj ); x方向で分散を計算し,x方向の長さが1の配列を取得
mdarray md_variance_y( const mdarray &obj ); y方向で分散を計算し,y方向の長さが1の配列を取得
mdarray md_variance_z( const mdarray &obj ); z方向で分散を計算し,z方向の長さが1の配列を取得
double md_skewness( const mdarray &obj, bool minus1 ); 全要素の歪度を取得
mdarray md_skewness_x( const mdarray &obj, bool minus1 ); x方向で歪度を計算し,x方向の長さが1の配列を取得
mdarray md_skewness_y( const mdarray &obj, bool minus1 ); y方向で歪度を計算し,y方向の長さが1の配列を取得
mdarray md_skewness_z( const mdarray &obj, bool minus1 ); z方向で歪度を計算し,z方向の長さが1の配列を取得
double md_kurtosis( const mdarray &obj, bool minus1 ); 全要素の尖度を取得
mdarray md_kurtosis_x( const mdarray &obj, bool minus1 ); x方向で尖度を計算し,x方向の長さが1の配列を取得
mdarray md_kurtosis_y( const mdarray &obj, bool minus1 ); y方向で尖度を計算し,y方向の長さが1の配列を取得
mdarray md_kurtosis_z( const mdarray &obj, bool minus1 ); z方向で尖度を計算し,z方向の長さが1の配列を取得
double md_stddev( const mdarray &obj ); 全要素の標準偏差を取得
mdarray md_stddev_x( const mdarray &obj ); x方向で標準偏差を計算し,x方向の長さが1の配列を取得
mdarray md_stddev_y( const mdarray &obj ); y方向で標準偏差を計算し,y方向の長さが1の配列を取得
mdarray md_stddev_z( const mdarray &obj ); z方向で標準偏差を計算し,z方向の長さが1の配列を取得
mdarray md_stddev_small_z( const mdarray &obj ); z方向で標準偏差を計算し,z方向の長さが1の配列を取得 (高速)
double md_min( const mdarray &obj ); 全要素の最小値を取得
mdarray md_min_x( const mdarray &obj ); x方向で最小値を計算し,x方向の長さが1の配列を取得
mdarray md_min_y( const mdarray &obj ); y方向で最小値を計算し,y方向の長さが1の配列を取得
mdarray md_min_z( const mdarray &obj ); z方向で最小値を計算し,z方向の長さが1の配列を取得
mdarray md_min_small_z( const mdarray &obj ); z方向で最小値を計算し,z方向の長さが1の配列を取得 (高速)
double md_max( const mdarray &obj ); 全要素の最大値を取得
mdarray_double md_max_x( const mdarray &obj ); x方向で最大値を計算し,x方向の長さが1の配列を取得
mdarray_double md_max_y( const mdarray &obj ); y方向で最大値を計算し,y方向の長さが1の配列を取得
mdarray_double md_max_z( const mdarray &obj ); z方向で最大値を計算し,z方向の長さが1の配列を取得
mdarray_double md_max_small_z( const mdarray &obj ); z方向で最大値を計算し,z方向の長さが1の配列を取得 (高速)
double md_median( const mdarray &obj ); 全要素のmedian(本物)を取得
mdarray md_median_x( const mdarray &obj ); x方向でmedian(本物)を計算し,x方向の長さが1の配列を取得
mdarray md_median_y( const mdarray &obj ); y方向でmedian(本物)を計算し,y方向の長さが1の配列を取得
mdarray md_median_z( const mdarray &obj ); z方向でmedian(本物)を計算し,z方向の長さが1の配列を取得
mdarray md_median_small_z( const mdarray &obj ); z方向でmedian(本物)を計算し,z方向の長さが1の配列を取得 (高速)
mdarray_double md_moment( const mdarray &obj, bool minus1,
                          double *ret_mdev, double *ret_sdev );
全要素の平均値,分散,歪度,尖度,平均絶対偏差,標準偏差を取得

md_moment()

mdarray_double md_moment( const mdarray &obj, bool minus1,
                          double *ret_mdev, double *ret_sdev );

全要素の平均値,分散,歪度,尖度,平均絶対偏差,標準偏差を取得します.

歪度,尖度の算出には (N-1) で割る定義,N で割る定義があります. 引数 minus1 には, 前者の定義を使う場合には true を, 後者の定義を使う場合には false をセットしてください. 平均絶対偏差,標準偏差が必要な場合,それぞれ ret_mdevret_sdev に変数のアドレスをセットしてください. 不要な場合は NULL をセットする事もできます.

引数 minus1true の時,統計値の定義は下記のとおりです.
(IRAFのマニュアルの引用):

        mean = sum (x1,...,xN) / N                                       
           y = x - mean                                                  
  meanabsdev = sum (abs(y1),...,abs(yN)) / N                             
    variance = sum (y1 ** 2,...,yN ** 2) / (N-1)                         
      stddev = sqrt (variance)                                           
    skewness = sum ((y1 / stddev) ** 3,...,(yN / stddev) ** 3) / (N-1)   
    kurtosis = sum ((y1 / stddev) ** 4,...,(yN / stddev) ** 4) / (N-1) - 3
返り値
平均値,分散,歪度,尖度が格納された長さ4の1次元配列