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.

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top