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