Проблема с выводом big_cprodMat: матрица слишком большая
Я пытаюсь получить перекрестное произведение двух "больших матриц" в R. К сожалению, данные не могут быть раскрыты здесь, но размеры 177304*23 и 23*177304, так что результаты должны иметь размеры 177304*177304.
Поскольку объем моей оперативной памяти составляет 8 ГБ, вместо этого я использовал класс FBM для хранения матриц в дисковом пространстве. Но когда я использую функцию big_cprodMat, чтобы найти перекрестный продукт, кажется, что сначала он решает продукт, используя матричный объект-класс в качестве выходных данных, и вместо этого происходит сбой R.
Могу ли я что-нибудь сделать, чтобы избежать этого?
Я новичок на сайте и очень ценю любую помощь, которую может предложить любой.
1 ответ
Используя небольшой пример:
N <- 17e3
M <- 23
A <- matrix(rnorm(N * M), N, M)
B <- matrix(rnorm(N * M), M, N)
Вы можете заполнить полученную матрицу блоками (обратите внимание, что для требуемого размера потребуется 234 ГБ на диске):
library(bigstatsr)
AB <- FBM(N, N, backingfile = "test")$save()
big_apply(AB, a.FUN = function(X, ind) {
X[, ind] <- A %*% B[, ind]
NULL
}, block.size = 1e3)
Не стесняйтесь, чтобы открыть вопрос о репозитории GitHub {bigstatsr}.