Я знаю, что в R есть пакеты для эффективного хранения разреженных матриц. Есть ли способ эффективно хранить матрицу низкого ранга? Например:Хранение большой, но низкоуровневой матрицы эффективно
A <- matrix(rnorm(1e6), nrow=1e5, ncol=1e1)
B <- A %*% t(A)
Теперь B
слишком велик, чтобы сохранить в памяти, но это низкий по рангу. Есть ли способ построить и сохранить B
эффективным способом, так что некоторые основные методы чтения (rowSums
, colSums
и т. Д.) Выполняются «на лету», чтобы торговать за процессор или память?
Интересный вопрос: какие приложения у него были бы? (Где вообще выглядят матрицы низкого ранга?) –
@DavidRobinson: Эти матрицы используются, например, в качестве приближений больших плотных матриц (слишком больших для вычисления или даже для хранения) в некоторых [алгоритмах оптимизации] (http://en.wikipedia.org/wiki/Limited-memory_BFGS). –
Если вы хотите приблизиться к B, вы можете использовать низкоразмерное приближение, например. использовать SVD и сохранить первые n измерений SVD? Не уверен, что это совсем то, чего вы хотите, но, возможно, стоит рассмотреть. –