Проблема с выводом big_cprodMat: слишком большая матрица

Я пытаюсь получить векторное произведение двух "Больших матриц" в R. К сожалению, данные здесь не могут быть раскрыты, но размерности 177304*23, и 23*177304, так что результаты должны иметь размеры 177304* 177304.

Поскольку моя оперативная память составляет 8 ГБ, вместо этого я использовал класс FBM для хранения матриц в дисковом пространстве. Но когда я использую функцию big_cprodMat для поиска перекрестного произведения, кажется, что сначала он решает произведение, используя матричный класс-объект в качестве вывода, и вместо этого происходит сбой R.

Могу ли я что-нибудь сделать, чтобы избежать этого?

Я новичок на веб-сайте и очень ценю любую помощь, которую кто-либо может предложить.


person Shuvani Choudhury    schedule 24.07.2019    source источник
comment
Хотите предоставить рабочий пример с смоделированными данными?   -  person Roman Luštrik    schedule 24.07.2019


Ответы (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)

Не стесняйтесь открывать вопрос в репозитории {bigstatsr} на GitHub.

person F. Privé    schedule 24.07.2019
comment
Спасибо! Код работал, но я все равно открыл проблему, чтобы добавить возможность будущих улучшений. - person Shuvani Choudhury; 25.07.2019
comment
Ok. Если это работает для вас, подтвердите ответ. - person F. Privé; 25.07.2019