C ++ Собственная индексная операция (эквивалентна R tapply) - PullRequest
0 голосов
/ 23 октября 2018

У меня вопрос по поводу библиотеки Eigen.Я хочу вычислить минимум (или сумму) элементов вектора (скажем, v) при группировке этих элементов в зависимости от другого вектора (скажем, i), который определяет группы значений.

Eigen::vectorXd v(10); // values
v.setLinSpaced(10,1,10); // 1, 2, ...10
Eigen::vectorXi i(10); // labels
i << 1, 1, 1, 2, 2, 2, 3, 3, 3, 3; // 3 different groups with label 1, 2 or 3

Я хочу выполнить групповую или индексную операцию, т.е. получить минимум для групп значений в v, которые определены в i: минимум значений в v, соответствующий индексам записей в i равно 1, то же самое для записей в i равно 2 и для записей в i равно 3.

Eigen::vectorXd m(3); // group-wise min (here I have 3 groups)
m = v.XXXX(i); // what I want: 1, 4, 7 given by function XXXX

Другими словами, я ищу эквивалентtapply функция в R (https://stat.ethz.ch/R-manual/R-patched/library/base/html/tapply.html).

В настоящее время я делаю это вручную, извлекая значения в v для каждой группы в i. Надеемся, что существует другой способ.

Заранее спасибо

Редактировать: Если существует метод, чтобы я мог просто извлечь значения в v, для которых записи в i равны 1 (или 2 или 3)Это было бы отличным началом.

...