Я неправильно использую histc, или это ошибка MATLAB?
Вопрос
Хорошо, вот немного кода в MATLAB:
data = [1 1.5 2 3 4 4.5 5 6 7 7 7 0 0 0];
histc(data, [1:1:5])
histc(data, [1:1:5, inf])
histc(data, [-inf, 1:1:5])
который выводит следующее:
ans = 2 1 1 2 1
ans = 2 1 1 2 5 0
ans = 3 2 1 1 2 1
Мой вопрос в том, почему MATLAB возвращает бесполезный 0, когда вы используете inf в размере ячейки (в данном случае это означает > = 5)?
Разве он не будет всегда равен нулю?В справке говорится, что выходные данные всегда будут иметь ту же длину, что и размер ячейки, но разве это не плохая спецификация в данном случае?
Решение
Это на самом деле правильное поведение HISTC ( история ).Когда вы используете синтаксис:
n = histc(x,edges);
затем, из документации:
n(k) подсчитывает значение x (i), если ребра (k) <= x(i) < ребра (k+1).В последней ячейке учитываются любые значения x, которые совпадают с ребрами (end).
Следовательно, последнее значение ребра, которое вы указываете, возвращает количество элементов именно так сопоставьте это.Когда inf является последним значением ребра, которое имеет значение 0 (т.е.здесь нет никаких infs в данных).Когда 5 является последним значением ребра, оно в точности соответствует значению 1 в данных.