2017-02-27 3 views
0

これは非常に未解決の質問です。 私はすぐにコードのいくつかのセクションの時間を測定する必要があります。私はstd::chrono::high_resolution_clock機能を使用しています。私は多くの反復のためにこのコードを実行し、期間を測定する必要があります。コードの統計的サンプリング

ここで問題があります:私は最小および最大期間値を測定し、サンプル数の数を使用して平均を計算することができます。この場合、4つの値を格納するだけです。しかし、私はまた、データがどのように配布されているか知りたいと思う。標準偏差またはヒストグラムを計算するには、すべてのデータポイントを保存する必要があります。しかし、これには、巨大な初期データ構造または動的に成長するデータ構造のいずれかが必要です。どちらも、組み込みシステムの測定コードに影響します。 前のサンプルの標準偏差を使用して、このサンプルの標準偏差を計算する方法はありますか?標準偏差またはヒストグラムの

答えて

0

計算は、すべてのデータポイントが自明偽だ

に格納されている必要があります。 Welfordのアルゴリズムでは、実行中の標準偏差を計算することができます。これは、実行中の平均と要素の現在の数以外に1つの余分な変数が必要です。

ヒストグラムでは、すべてのデータを保持する必要はありません。各ビンのカウントを保持し、新しいサンプルがあるたびに正しいビンを増やすだけです。もちろん、この簡単な方法で支払う予定の範囲とビンの数を事前に知る必要があります。これが不可能な場合は、現在の範囲外の要素を満たすたびに、小さな範囲で小さな範囲から開始し、範囲を拡大/縮小(隣接する範囲をマージ)することができます。この場合も、固定量のメモリー(各ビンに1つの整数、範囲に2つの値)だけが必要です。

+0

これは正しい値の範囲がわかりません。ビンの自動調整が機能する場合があります。あなたはオープンソースのコード例を知っていますか? Welfordのアルゴリズムを指摘してくれてありがとう。 – ilya1725

関連する問題