タグ付けされた質問 「median」

30
SQL Serverで中央値を計算する関数
MSDNによると、MedianはTransact-SQLの集計関数として使用できません。ただし、この機能を作成できるかどうかを確認したいと思います(Create Aggregate関数、ユーザー定義関数、またはその他の方法を使用)。 これを行うには(可能な場合)最良の方法は何ですか?集約クエリで中央値(数値データ型を想定)の計算を可能にしますか?

8
整数のストリームから実行中の中央値を見つける
重複の可能性: Cのローリングメディアンアルゴリズム 整数がデータストリームから読み取られると仮定します。これまでに読み込まれた要素の中央値を効率的な方法で見つけます。 私が読んだソリューション:左側の最大ヒープを使用して有効中央値よりも小さい要素を表し、右側の最小ヒープを使用して有効中央値よりも大きい要素を表すことができます。 着信要素を処理した後、ヒープ内の要素の数は最大で1要素だけ異なります。両方のヒープに同じ数の要素が含まれている場合、ヒープのルートデータの平均が有効な中央値であることがわかります。ヒープのバランスが取れていない場合は、より多くの要素を含むヒープのルートから有効な中央値を選択します。 しかし、最大ヒープと最小ヒープをどのように構築するのでしょうか。つまり、ここで有効な中央値をどのようにして知るのでしょうか。max-heapに1つの要素を挿入してから、min-heapに次の1つの要素を挿入する、というように、すべての要素について考えます。私がここで間違っているなら、私を訂正してください。
223 algorithm  heap  median 

30
MySQLで中央値を計算する簡単な方法
MySQLで中央値を計算する最も簡単な(そして遅すぎないことが望ましい)方法は何ですか?私はAVG(x)平均を見つけるために使用しましたが、中央値を計算する簡単な方法を見つけるのに苦労しています。今のところ、すべての行をPHPに返し、並べ替えを行ってから中央の行を選択していますが、単一のMySQLクエリでそれを行う簡単な方法がいくつかあるはずです。 データの例: id | val -------- 1 4 2 7 3 2 4 2 5 9 6 8 7 3 並べ替えはvalを与える2 2 3 4 7 8 9ので、中央値はであるの4に対し、SELECT AVG(val)どちらの==である必要があり5ます。
208 sql  mysql  statistics  median 

23
Pythonでリストの中央値を見つける
Pythonでリストの中央値をどのようにして見つけますか?リストは任意のサイズにすることができ、数値が特定の順序であるとは限りません。 リストに含まれる要素の数が偶数の場合、関数は中央の2つの要素の平均を返す必要があります。 次にいくつかの例を示します(表示目的でソートされています)。 median([1]) == 1 median([1, 1]) == 1 median([1, 1, 2, 4]) == 1.5 median([0, 2, 5, 6, 8, 9, 9]) == 6 median([0, 0, 0, 0, 4, 4, 6, 8]) == 2
181 python  list  sorting  median 

12
Cのローリングメディアンアルゴリズム
私は現在、Cでローリングメジアンフィルター(ローリングミーンフィルターに類似)を実装するアルゴリズムに取り組んでいます。私の文献検索から、それを行うには2つの合理的に効率的な方法があるようです。1つ目は、値の初期ウィンドウを並べ替えてから、バイナリ検索を実行して新しい値を挿入し、反復ごとに既存の値を削除します。 2番目(Hardle and Steiger、1995、JRSS-C、アルゴリズム296から)は、両端にヒープ、もう一方に最小ヒープ、中央に中央値を持つ両頭ヒープ構造を構築します。これにより、O(n log n)の代わりに線形時間アルゴリズムが生成されます。 これが私の問題です。前者の実装は可能ですが、これを何百万もの時系列で実行する必要があるため、効率が非常に重要です。後者は実装が非常に難しいことがわかっています。RのstatsパッケージのコードのTrunmed.cファイルでコードを見つけましたが、かなり判読できません。 線形時間ローリングメディアンアルゴリズムの適切に作成されたC実装を知っている人はいますか? 編集:Trunmed.cコードへのリンクhttp://google.com/codesearch/p?hl=en&sa=N&cd=1&ct=rc#mYw3h_Lb_e0/R-2.2.0/src/library/stats/src/Trunmed.c
114 c  algorithm  r  statistics  median 

13
統計的中央値、最頻値、歪度、尖度を推定するための「オンライン」(イテレーター)アルゴリズム?
値のセットの中央値、最頻値、歪度、および/または尖度を推定するアルゴリズムはありますが、すべての値を一度にメモリに保存する必要はありませんか? 基本的な統計を計算したいのですが: 平均:算術平均 分散:平均からの偏差の2乗の平均 標準偏差:分散の平方根 中央値:数値の大きい方の半分を小さい方の半分から分離する値 モード:セットで見つかった最も頻繁な値 歪度:tl; 博士 尖度:tl; 博士 これらのいずれかを計算するための基本的な式は、小学校の算数であり、私はそれらを知っています。それらを実装する多くの統計ライブラリもあります。 私の問題は、処理しているセット内の値の数が多い(数十億)ことです。Pythonで作業していると、数十億の要素でリストやハッシュを作成することはできません。これをCで書いたとしても、10億要素の配列はあまり実用的ではありません。 データはソートされていません。他のプロセスによって、オンザフライでランダムに生成されます。各セットのサイズは非常に可変であり、サイズは事前にわかりません。 セット内の各値を任意の順序で反復して、平均と分散をかなりうまく処理する方法をすでに理解しました。(実際、私の場合は、生成された順序でそれらを取得します。)これが私が使用しているアルゴリズムです。礼儀http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#On-line_algorithm: count、sum、sum_of_squaresの3つの変数を初期化します 各値について: インクリメントカウント。 合計に値を追加します。 値の2乗をsum_of_squaresに追加します。 合計をカウントで除算し、変数の平均として保存します。 sum_of_squaresをカウントで除算し、変数mean_of_squaresとして格納します。 二乗平均、square_of_meanとして保存。 mean_of_squaresからsquare_of_meanを減算し、分散として保存します。 出力の平均と分散。 この「オンライン」アルゴリズムには弱点があります(たとえば、sum_of_squaresが整数範囲または浮動小数点精度よりも急速に大きくなるための精度の問題)が、基本的に、各セットにすべての値を格納する必要がなく、必要なものが得られます。 しかし、追加の統計(中央値、最頻値、歪度、尖度)を推定するための同様の手法が存在するかどうかはわかりません。N値を処理するために必要なメモリがO(N)よりも大幅に少ない限り、偏りのある推定量、またはある程度精度を損なう方法でさえ生きることができます。 ライブラリにこれらの操作の1つ以上を「オンライン」で計算する関数がある場合は、既存の統計ライブラリを指すことも役立ちます。

4
numpy.median.reduceatの高速代替
この回答に関連して、要素数が等しくないグループを持つ配列の中央値を計算する高速な方法はありますか? 例えば: data = [1.00, 1.05, 1.30, 1.20, 1.06, 1.54, 1.33, 1.87, 1.67, ... ] index = [0, 0, 1, 1, 1, 1, 2, 3, 3, ... ] そして私は、(例えば、中央値グループの数やグループごとの中央値との差異を計算したい0です1.025最初の結果があるので1.00 - 1.025 = -0.025)。したがって、上記の配列の場合、結果は次のようになります。 result = [-0.025, 0.025, 0.05, -0.05, -0.19, 0.29, 0.00, 0.10, -0.10, ...] np.median.reduceat(まだ)存在しないので、これを達成する別の高速な方法はありますか?私のアレイには数百万の行が含まれるため、速度は非常に重要です。 インデックスは連続していて順序付けられていると見なすことができます(そうでない場合は簡単に変換できます)。 パフォーマンス比較のデータ例: import numpy …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.