Вопрос

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

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

изменить

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

Пример. Допустим, у меня есть следующее (я пытаюсь сделать это в октаве, но 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]

, а затем получите среднее значение для каждой ячейки.

Обновление: я разместил дополнительный вопрос здесь . Я был бы очень признателен за ответы.

Это было полезно?

Решение

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

http://blogs.mathworks.com / видео / 2009/01/07 / биннинг-данные в-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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top