Биннинг в 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]
а затем получить среднее значение для каждого бина.
Обновление: я опубликовал следующий вопрос здесь. Я был бы очень благодарен за ответы.
Ответы
Ответ 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