Можно ли использовать Eigen также для 1-векторов (скаляров)?

Я пишу некоторую процедуру, которая формально идентична для 2-векторов, а также для скаляров. Я хотел бы написать is как шаблон для Eigen::Matrix<double,N,1>, создав его экземпляр для N = 2 или N = 1 (для скаляров, обернув скаляр double d как Eigen::Map<Eigen::Matrix<double,1,1>>(&d).

Eigen разработан с учетом этого особого случая? Будет ли это эффективно, например. внутренний вызов abs(v1) для Eigen::Matrix<double,1,1>::norm(), v1*v1 для squaredNorm() или copysign(1,v1) для normalized()?


person eudoxos    schedule 02.12.2016    source источник


Ответы (1)


Для size=1 нет явных специализаций, но благодаря явным развертывателям большинство выражений будет генерировать скалярный код. Например, squaredNorm() сгенерирует x*x, а norm сгенерирует sqrt(x*x). То же самое для normalized().

person ggael    schedule 02.12.2016
comment
Спасибо! (Я должен написать больше, говорит ТАК :) Так что: может быть, потенциально полезная оптимизация). - person eudoxos; 03.12.2016