Classificando itens em caixas no Matlab
Pergunta
Se eu tiver um conjunto de dados y e um conjunto de caixas centralizadas em x, posso usar o comando Hist para encontrar quantos de cada Y estão em cada compartimento.
N = hist(Y,X)
O que eu gostaria de saber é se houver uma função incorporada que possa me dizer em que lixeira cada y entra, então
[N,I] = histMod(Y,X)
significaria que y (i == 1) retornaria todo o y na bin 1, etc.
Eu sei como escrever essa função, então só estou me perguntando se já existe um embutido no Matlab que faz isso.
Solução
A função relacionada histc
Faz isso, mas exige que você defina as bordas da lixeira em vez dos centros de bin.
Y = rand(1, 10);
edges = .1:.1:1;
[N, I] = histc(Y, edges);
Compiar as bordas dadas os bincentros também é fácil. Em um revestimento:
N = hist(Y, X);
torna-se
[Nc, Ic] = histc(Y, [-inf X(1:end-1) + diff(X)/2, inf]);
com NC == n, mais uma lixeira extra vazia no final (já que presumo que nenhum valor em y corresponde a INF). Ver doc histc
.
Outras dicas
Se alguém estiver satisfeito em usar bordas de bin em vez de caixas,
[N,bin] = histc(y,binedges)
funciona. Aaargh, matlab suas definições de função são tão não intuitivas