R внутренняя обработка разреженных матриц

Я сравнивал производительность нескольких реализаций PCA от Python и R и замечал интересное поведение:
Хотя представляется невозможным вычислить PCA разреженной матрицы в Python (единственным подходом будет scuncitSVD scikit-learn, но он не поддерживает среднее значение, необходимое для эквивалентности ковариационного решения для PCA. Их аргументация такова, что это приведет к уничтожению свойства разреженности матрицы. Другие реализации, такие как алгоритм Facebook PCA или метод PCA/randomPCA в изучении scikit, не поддерживают разреженные матрицы по тем же причинам.

Хотя все это имеет смысл для меня, несколько R-пакетов, таких как irlba, rsvd и т.д., Способны обрабатывать разреженные матрицы (например, сгенерированы с помощью rsparsematrix) и даже допускать конкретные аргументы center=True.

Мой вопрос заключается в том, как R обрабатывает это внутренне, поскольку он кажется намного более эффективным, чем сопоставимая реализация Python. Остается ли R поддерживать разреженность, делая вместо этого Абсолютное масштабирование (что теоретически фальсифицировало бы результаты, но, по крайней мере, сохраняло бы разреженность)? Или есть способ, в котором среднее может быть явно сохранено для нулевых значений и хранится только один раз (вместо каждого значения отдельно)?

Чтобы избавиться от удержания: как R внутренне хранит матрицы со средним центрированием без разрыва использования ОЗУ. Надеюсь, что это будет достаточно кратким....

Ответы