Подтвердить что ты не робот

Биннинг в Matlab

Мне не удалось найти функцию в matlab или октаве, чтобы делать то, что я хочу. У меня есть матрица m двух столбцов (значения x и y). Я знаю, что я могу извлечь столбец, выполнив m (:, 1) или m (:, 2). Я хочу разбить его на более мелкие матрицы [потенциально] равного размера и составить среднее значение этих матриц. Другими словами, я хочу поместить значения в ячейки на основе значений x, а затем найти средства для бункеров. Я чувствую, что функция hist должна мне помочь, но это не похоже.

Кто-нибудь знает о встроенной функции, чтобы сделать что-то вроде этого?

изменить

Я намеревался упомянуть, что я смотрел на историю и не мог заставить ее делать то, что я хотел, но она, должно быть, сошла с ума.

Пример: скажем, у меня есть следующее (я пробую это в октаве, но afaik работает в Matlab):

x=1:20;
y=[1:10,10:1];
m=[x, y];

Если мне нужно 10 бункеров, я бы хотел, чтобы m разделилось на:

m1=[1:2, 1:2]
...
m5=[9:10, 9:10]
m6=[10:11, 10:-1:9]
...
m10=[19:20, 2:-1:1]

а затем получить среднее значение для каждого бина.

Обновление: я опубликовал следующий вопрос здесь. Я был бы очень благодарен за ответы.

4b9b3361

Ответ 1

Я ответил на это в видео форме в своем блоге:

http://blogs.mathworks.com/videos/2009/01/07/binning-data-in-matlab/

Вот код:

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