Não tenho certeza se existe uma maneira mais eficiente de calcular o ECDF nos pontos de dados , mas a seguinte abordagem de força bruta deve ser eficiente para calcular o ECDF sobre a "grade" de dados . É uma generalização simples da versão 1D.
Assumir que tem um conjunto de dados consistindo de pontos em dimensões, dado no matriz . Por simplicidade, assumirei que consiste inteiramente em números únicos (ou seja, posição geral *). Vou usar Matlab notação na pseudo-código a seguir, uma vez que é como eu pensava do algoritmo, mas posso expandir a este caso haja interesse.NdN× dXX
Primeira computação
[x: , k,Eu: , k] = classificar [X: , k] para ,k = 1 : d
onde é a matriz de classificação em coordenadas e é a matriz do eixo da grade de coordenadas (ambos do tamanho ).EuxN× d
Em seguida, rasterize os pontos de dados na grade de dados implícita, computando um histograma (normalizado) como
.P= accumarray [ I,1 1N, N× ones [1, d] ]
Em seguida, integre esse "EPDF" em cada dimensão para fornecer ao ECDF:
para .P= cumsum [ P, K ]k = 1 : d
Agora é o ECDF amostrado em .PEu1 1, ... ,EudxEu1 1, 1, …xEud, d
Esse algoritmo leva tempo para cada classificação e para cada soma, portanto, o custo total é . Como o próprio ECDF em grade possui elementos , isso deve ser essencialmente ideal.O [ NregistroN]O[Nd]O [ d(Nd+ NregistroN) ]O [Nd]
(* A suposição de pontos distintos pode ser relaxada usando vez de , juntamente com um pouco de contabilidade.)único [ ]classificar [ ]