データポイントでECDFを計算するより効率的な方法があるかどうかはわかりませんが、次のブルートフォースアプローチは、データ「グリッド」で ECDFを計算するのに効率的です。これは、1Dバージョンの単純な一般化です。
行列で与えられた、次元の点で構成されるデータセットがあるとします。簡単にするために、は完全に一意の番号(つまり、一般的な位置 *)で構成されると仮定します。次の疑似コードでは、アルゴリズムについて私が考えた方法でMatlab表記を使用しますが、興味があればこれを拡張できます。NdN×dXX
最初の計算
[x:,k,I:,k]=sort[X:,k] for、k=1:d
ここで、は座標ごとのランク行列、は座標グリッド軸行列(両方ともサイズ)です。IxN×d
次に、データポイントを暗黙のデータグリッドにラスタライズし、として(正規化された)ヒストグラムを計算し
。P=accumarray[I,1N,N×ones[1,d]]
次に、この "EPDF"を各次元で統合して、ECDFを取得します
for。P=cumsum[P,k]k=1:d
ここでは、サンプリングされたECDF です。Pi1,…,idxi1,1,…xid,d
このアルゴリズムは、並べ替えごとに、合計ごとにかかるため、合計コストは。グリッドECDF自体に要素があるため、これは本質的に最適であるはずです。O[NlogN]O[Nd]O[d(Nd+NlogN)]O[Nd]
(*個別の点の仮定は、代わりに使用し、少しの簿記を行うことで緩和できます。)unique[]sort[]