Pergunta
Eu fui incapaz de encontrar uma função em Matlab ou oitava para fazer o que eu quero. I têm uma matriz m de duas colunas (valores x e y). Sei que pode extrair a coluna, fazendo m (:, 1) ou m (:, 2). Eu quero dividi-lo em matricies menores de [potencialmente] tamanho igual e e traçar a média destes matricies. Em outras palavras, eu quero colocar os valores em caixas com base nos valores de x, em seguida, encontrar meios de caixas. Eu me sinto como a função hist deve me ajudar, mas não parece.
Alguém sabe de um built-in função para fazer algo assim?
editar
Eu tinha a intenção de mencionar que eu olhei para hist e não poderia obtê-lo para fazer o que eu queria, mas ele deve ter deslizado minha mente.
Exemplo: Vamos dizer que eu tenho o seguinte (eu estou tentando isso em oitava, mas AFAIK ele funciona em Matlab):
x=1:20;
y=[1:10,10:1];
m=[x, y];
Se eu quiser 10 caixas, gostaria m ser dividida em:
m1=[1:2, 1:2]
...
m5=[9:10, 9:10]
m6=[10:11, 10:-1:9]
...
m10=[19:20, 2:-1:1]
e em seguida, obter a média de cada bin.
Update: eu postei uma pergunta de acompanhamento aqui . Eu gostaria muito de receber respostas.
Solução
Eu respondi isso em forma de vídeo no meu blog:
http://blogs.mathworks.com / vídeos / 2009/01/07 / binning-data-in-Matlab /
Aqui está o código:
m = rand(10,2); %Generate data
x = m(:,1); %split into x and y
y = m(:,2);
topEdge = 1; % define limits
botEdge = 0; % define limits
numBins = 2; % define number of bins
binEdges = linspace(botEdge, topEdge, numBins+1);
[h,whichBin] = histc(x, binEdges);
for i = 1:numBins
flagBinMembers = (whichBin == i);
binMembers = y(flagBinMembers);
binMean(i) = mean(binMembers);
end