Эффективный способ создания эмпирической объединенной вероятностной матрицы путем суммирования строк выборок в соответствии с заданным порядком в 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?

1 ответ

Решение

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

[xx, yy] = ndgrid(labels,1:size(samples,2));
P = accumarray([xx(:) yy(:)],samples(:));
Другие вопросы по тегам