Поддержка разреженных матриц для длинных векторов (более 2 ^ 31 элементов) - PullRequest
0 голосов
/ 28 января 2019

Я знаю, что этот вопрос задавался в прошлом (например, здесь и здесь ), но этим вопросам уже много лет, и они не решены.Мне интересно, если какие-либо решения были созданы с тех пор.Проблема в том, что пакет Matrix в R не может обрабатывать длинные векторы (длина которых больше 2 ^ 31 - 1).В моем случае для запуска модели XGBoost необходима разреженная матрица из-за ограничений по памяти и времени.XGBoost xgb.DMatrix поддерживает использование объекта dgCMatrix.Однако из-за размера моих данных попытка создать разреженную матрицу приводит к ошибке.Вот пример проблемы.(Предупреждение: используется 50-60 ГБ ОЗУ.)

i <- rep(1, 2^31)
j <- i
j[(2^30): length(j)] <- 2
x <- i
s <- sparseMatrix(i = i, j = j, x = x)

Ошибка в validityMethod (as (object, superClass)): длинные векторы еще не поддерживаются: ../../src/include / Rinlinedfuns.h: 137

По состоянию на 2019 год есть ли какие-либо решения этой проблемы?

Я использую последнюю версию пакета Matrix, 1.2-15.

1 Ответ

0 голосов
/ 16 апреля 2019

Пакет алгебры разреженной матрицы R spam с расширением spam64 поддерживает разреженные матрицы с более чем 2 ^ 31-1 ненулевыми элементами.

Простойпример (требует ~ 50 ГБ памяти и ~ 5 минут для запуска):

## -- a regular 32-bit spam matrix
library(spam) # version 2.2-2
s <- spam(1:2^30)
summary(s) 
## Matrix object of class 'spam' of dimension 1073741824x1,
##     with 1073741824 (row-wise) nonzero elements.
##     Density of the matrix is 100%.
## Class 'spam'

## -- a 64-bit spam matrix with 2^31 non-zero entries
library(spam64)
s <- cbind(s, s) 
summary(s) 
## Matrix object of class 'spam' of dimension 1073741824x2,
##     with 2147483648 (row-wise) nonzero elements.
##     Density of the matrix is 100%.
## Class 'spam'

## -- add zeros to make the dimension 2^31 x 2^31
pad(s) <- c(2^31, 2^31) 
summary(s) 
## Matrix object of class 'spam' of dimension 2147483648x2147483648,
##     with 2147483648 (row-wise) nonzero elements.
##     Density of the matrix is 4.66e-08%.
## Class 'spam'

Некоторые ссылки:

Я являюсь одним из авторов dotCall64 и spam .

...