2017-01-08 19 views
7

の2つの差分のの値の集計(最小/最大/平均)を事前計算(キャッシュ)することは可能ですか?差分の集計時系列集

1つまたは複数の測​​定値が1秒ごとに複数のチャネル(50など)があり、事前計算された1分または15分の集計を簡単に保存して表示を高速化できます。

しかし、要件の1つは相対的な値のグラフを表示することです。例えば。チャネルがC1,C2およびC3の場合、平均値はC1、平均値は(C2 - C3)(最小15分/最大値)です。例については

、のは、私はこれらの2つのチャンネル(48以上)としましょう:

t(min) 0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 
C1  0.0 0.1 0.2 -0.1 0.0 0.1 0.3 0.5 0.7 0.9 0.2 
C2  0.1 0.4 0.2 0.1 -0.1 0.5 0.6 0.1 0.2 0.3 0.0 

私は5分の集計事前計算して保存することができます

t(min) 0 to +4 +5 to +10 
C1_min  -0.1   0.1 
C1_max  0.2   0.9 
C2_min  -0.1   0.0 
C2_max  0.4   0.6 

、簡単に10分を取得しますこれからの15分の集約です。

しかし、ユーザーがmin(C2-C1)またはmax(C2-C1)の5分集計を表示したい場合、これらの50チャネルの任意の組み合わせについて、この情報を再利用できないようです。

つまり、min(C2-C3)min(C2)-min(C3)と等しくないため、これらのタプルの可能な組み合わせを別に保存するのではなく、これを事前に計算することは不可能です。

私はこれらの値をより速く計算するのに役立ついくつかのアイデアがありませんか?

+0

サンプルデータと望ましい結果が役立つと思います。 –

+0

@GordonLinoff:私は質問を更新しました。これで少し鮮明になることを願っています。 – Lou

+2

私は、あなたが最小と最大について正しいと思います(2つの同一の信号を考えてみましょう。その違いはゼロになります)。平均値は大丈夫ですが、ave(AB)= ave(A)-ave(B)(http://math.stackexchange.com/questions/1360311/why-is-the-average-of-a-sum-平均の和と同じ) – danh

答えて

1

C2C3のすべてのデータを集約してmin(C2-C3)にするだけで済みます。

: - あなたの目標は、この計算を行うために必要なデータを最小限に抑えることであれば

しかし、私はあなたが以下の方法でそれを行う提案(チャンネル数に応じて、このソリューションは、大きな数字を扱う必要があります)あなたはすべてのチャンネルがある値を超える値を持っていないことを知っている場合は

のは、それがC

計算に名前みましょう、我々は1つのチャンネル内のすべてのチャンネルのデータを組み合わせることができます(のは、それが10をだとしましょう)C

C = (C1 * 10^1) + (C2 * 10^2) + (C3 * 10^3) + .. + (Cn * 10^n). 

すべてのチャンネルの値が埋め込まれたチャンネルCになります。

そして、いくつかの点で2つのチャンネル間の差異を計算するために、あなたがしなければならないすべてはその場でCからこれらの2つのチャンネル値を「抽出」することです:

pはの小数精度で
C1 = floor((C mod 10^1)/10^(1-p))/10^p 
C2 = floor((C mod 10^2)/10^(2-p))/10^p 
... 
Cn = floor((C mod 10^n)/10^(n-p))/10^p 

抽出されたチャネル値。

min(Cy-Cx) = min((floor((C mod 10^y)/10^(y-p))/10^p) - (floor((C mod 10^x)/10^(x-p))/10^p)) 

そして、あなたは、時間の間隔で、これらの値を集計することができます

この場合、事前に計算Cを使用して、2つのチャンネルxy間の差分の計算は次のようになります。それが役に立てば幸い。

+0

しかし、これはまだ私がすべての単一の 'C 'を読む必要があることを意味し、各' C'は少なくともすべてのチャネルの合計と同じくらい大きいです。つまり、このようにもっと多くのデータを読み込む必要があります(テーブルへのアクセスは少なくなりますが、データの総量が大きくなります)。 – Lou

+0

これは確かにあなたのリソースの境界に依存しています。この場合、 'C'は大量のはいですが、計算前段階でminとmaxesと共に1回だけ計算しています。 しかし、diff集計を生成する場合、集約期間のすべてのチャネルデータにアクセスする必要はなく、対応するタイムスロットの「C」値にアクセスすることのみです。 –

+0

あなたの例では:もしあなたが50のチャンネルを持っていれば、これらのチャンネルデータのすべての組み合わせをループすることなく、 'C'値にアクセスするだけでdiffを得ることができます。 メモリサイズによって制限がありますか? –