2016-01-26 1 views
1

Рассмотрим следующий ниже пример, где у меня есть матрица 10x10, например A, случайных значений в некотором диапазоне, например [-5, 5]. Я квантую значения A на 8 категорий, 1, ..., 8, так что дополнительная матрица 10x10, скажем qA, описывает ассоциацию категорий для каждого номера в A. Наконец, я создаю суммы всех значений, присвоенных каждой категории. Мой вопрос касается этого заключительного шага.Как аккуратно суммировать значения гистограмм, учитывая матрицу значений и ассоциированную матрицу ассоциаций категорий (ассоциация бинов)

myRange = 5; % values in open interval [-myRange, myRange] 
A = myRange*(2*rand(10) - 1); 
qA = uencode(A, 3, myRange)+1; 

% (+) create "histogram" of sum of values assigned to each bin 
myHistogram = zeros(8,1); 
for i = 1:numel(A) 
    myHistogram(qA(i)) = myHistogram(qA(i)) + A(i); 
end 

bar(myHistogram) 

Вопрос: ли какой-то аккуратнее способ сделать это, в частности, на этапе подсчета (+) выше? (Некоторая лучшая альтернатива, чем явно итерация по каждому элементу в матрице A?).

ответ

2

Так же, как я собирался закончить и опубликовать свой вопрос, я нашел удовлетворительный ответ на него, но не здесь, на SO. Как self-answering is encouraged, я отправлю Q + A вместо того, чтобы прервать эту Q-проводку.


Таким образом, на основе следующих Matlab Central thread, один аккуратнее решение выглядит следующим образом:

myRange = 5; % values in open interval [-myRange, myRange] 
A = myRange*(2*rand(10) - 1); 
qA = uencode(A, 3, myRange)+1; 
% or, if you dont have Signal Processing Toolbox required for 'uencode' 
% [~, ~, qA] = histcounts(A, -myRange:myRange/4:myRange); 

% (+) create "histogram" of sum of values assigned to each bin 
myHistogram = accumarray(qA(:), A(:), [8 1]) 

Возможно, есть альтернативные/даже лучшие способы сделать это, выполняя квантование и значение бен суммирование в то же шаг?

+0

'uencode', кажется, предназначен для выполнения вашей задачи, и если у вас есть необходимый набор инструментов, это хороший вариант. Что касается второй части: 'tankarray' - это способ сделать это. – thewaywewalk

+0

@thewaywewalk Спасибо за отзыв. Я добавил альтернативное решение для 'uencode' в случае, если у человека нет доступа к Toolbox Toolbox. – dfri

Смежные вопросы