Поскольку аргумент edges
должен иметь монотонно неубывающие значения, один из способов переворота поведения ребра - это отменить и перевернуть аргумент edges
и отменить значения для биннинга. Если затем перевернуть вывод счетчика из HISTC , вы должны увидеть типичное поведение ребра HISTC в обратном порядке:
n = fliplr(histc(-x,-fliplr(edges)));
В приведенном выше примере используется FLIPLR , поэтому x
и edges
должны быть векторами строк (т.е. 1-на-N). Этот код будет хранить данные в соответствии со следующими критериями:
- Первый бин
n(1)
считает любые значения x
, которые соответствуют edges(1)
.
- Другие ячейки
n(k)
считают значения x(i)
такими, что edges(k-1) < x(i) <= edges(k)
.
Обратите внимание, что это переворачивает поведение ребер всех корзин, а не только первых и последних корзин! Типичное поведение HISTC для корзины n(k)
использует уравнение edges(k) <= x(i) < edges(k+1)
(обратите внимание на разницу между индексами и тем, какая сторона имеет знак равенства!).
РЕДАКТИРОВАТЬ: После некоторого обсуждения ...
Если вы вместо хотели бы поместить данные в соответствии со следующими критериями:
- Первый бин
n(1)
считает любые значения x
, которые соответствуют edges(1)
.
- Второй блок
n(2)
считает значения x(i)
, такие что edges(1) < x(i) < edges(2)
.
- Другие ячейки
n(k)
считают значения x(i)
такими, что edges(k-1) <= x(i) < edges(k)
.
Тогда следующее должно выполнить это:
n = histc(x,[edges(1) edges(1)+eps(edges(1)) edges(2:end)]);
n(end) = [];
Первый лоток должен захватывать только значения, равные edges(1)
, а нижний край второго лотка должен начинаться с инкрементного значения выше edges(1)
(обнаруживается с использованием функции EPS ). Последний бин, который считает число значений, равное edges(end)
, выбрасывается.