Сортировка предметов в мусорные ведра в MATLAB - PullRequest
4 голосов
/ 30 сентября 2010

Если у меня есть набор данных Y и набор бинов с центром в X, я могу использовать команду HIST, чтобы найти, сколько каждого Y находится в каждом бине.

N = hist(Y,X)

Что я хотел бы знать, так это наличие встроенной функции, которая может сказать мне, в какой бин входит каждый Y, поэтому

[N,I] = histMod(Y,X)

будет означать, что Y (I== 1) вернул бы все Y в bin 1 и т. Д.

Я знаю, как написать эту функцию, поэтому мне интересно только, есть ли уже встроенная в MATLAB, которая делает это.

Ответы [ 2 ]

7 голосов
/ 30 сентября 2010

Связанная функция histc делает это, но требует, чтобы вы определяли ребра ячеек вместо центров ячеек.

Y = rand(1, 10);
edges = .1:.1:1;
[N, I] = histc(Y, edges);

Вычисление ребер по заданным бинсентерам тоже очень просто. В один лайнер:

N = hist(Y, X);

становится

[Nc, Ic] = histc(Y, [-inf X(1:end-1) + diff(X)/2, inf]);

с Nc == N, плюс один дополнительный пустой контейнер в конце (так как я предполагаю, что никакое значение в Y не соответствует inf). Смотри doc histc.

2 голосов
/ 30 сентября 2010

Если вы удовлетворены использованием ребер лотка вместо лотков,

[N,bin] = histc(y,binedges)

работает. Aaargh, MATLAB ваши определения функций настолько неинтуитивны

...