Эффективный способ создания эмпирической совместной матрицы вероятностей путем суммирования строк выборок в соответствии с заданным порядком в Matlab.

Допустим, у меня есть матрица выборок samples (n_samples x n1) и вектор меток labels (n_samples x 1), где метки находятся в диапазоне [1:n2]

Я ищу эффективный способ создания эмпирической совместной матрицы вероятностей P размером n2 x n1. Где для каждого образца i мы добавляем его строку samples(i, :) в P в месте, указанном labels(i).

т.е. (псевдокод)

for i = 1:n_samples
   P(l(i), :) += M(i, :)

Есть ли для этого убийственная команда Matlab? Вместо цикла for или arrayfun?


person Yuval Atzmon    schedule 19.05.2016    source источник
comment
Я думаю, вы найдете здесь то, что вам нужно: fr.mathworks.com/matlabcentral/answers/   -  person BillBokeey    schedule 19.05.2016


Ответы (1)


После комментария @BillBokeey: вот решение

[xx, yy] = ndgrid(labels,1:size(samples,2));
P = accumarray([xx(:) yy(:)],samples(:));
person Yuval Atzmon    schedule 19.05.2016