リダクション関数
リダクション関数は、一連の値から1つの値を算出する関数です。
reduction = Reduce(value[1], …, value[n])
境界のケース n=0 においては、リダクション関数は空の値のシーケンスに適用されることになります。
neutral = Reduce()
これは、リダクションのニュートラルエレメントを定義するものです。
リダクション関数は、2つの値を結合関数で繰り返し組み合わせることによって定義されます。たとえば、加算を結合関数として使用することにより、入力値の合計が得られます。
tmp[0] = 0
tmp[i] = tmp[i-1] + value[i]
reduction = tmp[n]
既存のリダクション関数を用いて、別のリダクション関数を定義することもできます。
Minimum
リダクション関数 Minimum は、すべての入力値の最小値を返します。
combine(a, b) = min(a, b)
Minimum はすべての数値データタイプに対して使用できます。
Maximum
リダクション関数 Maximum は、すべての入力値の最大値を返します。
combine(a, b) = max(a, b)
Maximum はすべての数値データタイプに対して使用できます。
Count
リダクション関数 Count は、サンプルの数を返します。
Count(values[1], …, values[n]) = n
Add
リダクション関数 Add は、すべての入力値の合計を返します。
combine(a, b) = a + b
Average
リダクション関数 Average は、すべての入力値の平均を算出します。平均は、サンプル値の合計をサンプル数で割った値です。
Average(values) = Add(values) / Count(values)
Integral
リダクション関数 Integral は、最初のサンプルの時刻から最後のサンプルの時刻までのシグナルカーブの下側の面積を算出します。サンプル間はステップ補間されるので、実際には、各サンプルの右側に伸びた四角形の面積の合計となります。
r_i = s_i * (t_i+1 - t_i)
ここで s_i はインデックス i のサンプルの値で、t_i はそのサンプルの時刻です。最後のサンプルの右側の四角形は、終了時刻を超えた位置になるので、合計には含まれません。