Я работаю над проектом, в котором я в основном миллионы раз формирую PCA на наборах по 20-100 баллов.В настоящее время мы используем некоторый унаследованный код, который использует пакет линейной алгебры GSL GNU для выполнения SVD на ковариационной матрице.Это работает, но очень медленно.
Мне было интересно, есть ли какие-нибудь простые методы для выполнения собственных разложений на симметричной матрице 3x3, чтобы я мог просто поместить ее в графический процессор и позволить ему работать параллельно.
Поскольку сами матрицы очень малы, я не был уверен, какой алгоритм использовать, потому что кажется, что они были разработаны для больших матриц или наборов данных.Есть также выбор сделать прямой SVD на наборе данных, но я не уверен, что будет лучшим вариантом.
Я должен признать, я не звездный в линейной алгебре, особенно когда рассматриваюПреимущества алгоритма.Любая помощь будет принята с благодарностью.
(сейчас я работаю в C ++)