Проблема с выводом 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}.

Другие вопросы по тегам