В Eigen вроде бы есть встроенные алгоритмы, но они выполняют полное разложение, что очень долго и не нужно. Написал свою функцию разложения по NIPALS под Eigen
RedSVD делает SVD с заданным (меньшим, чем полное) количеством компонентов. Что даст PCA, сделанный на его основе?
уверен, что функция не оптимизирована по быстродействию.
Что говорит
profiler?