Ускорение серии расчетов по большой матрице в R - PullRequest
1 голос
/ 19 марта 2019

Какие-либо предложения, программно или математически, для ускорения этого вычисления в R?Я включил некоторые сгенерированные данные, которые близко соответствуют сценарию реальных данных, с которым я работаю.Я также пытался использовать apply и parApply и пытался превратить его в разреженную матрицу, поскольку у него очень много нулей, но пока это самый быстрый метод, который я придумал.Любые предложения, чтобы сделать это быстрее?Мне нужно сделать эти вычисления 10000 раз.

Данные, которые близко соответствуют моему сценарию:

set.seed(7)
# same size matrix as my real data data puzzle
A <- matrix(rbeta((13163*13163),1,1), ncol = 13163, nrow = 13163)

# turn a bunch to 0 to more closely match that I have a lot of 0's in real data
A[A < 0.5] <- 0

# create binary matrix
z <- matrix(rbinom((13163*13163), 1, 0.25), ncol = 13163, nrow = 13163)

Я обнаружил, что Rfast ::Rowsums дает мне самые быстрые результаты.

start1 <- Sys.time()
testA <- 1 - exp(Rfast::rowsums(log(1-A*z)))
stop1 <- Sys.time()
stop1 - start1

Прошу прощения за мой неуклюжий подход сравнительного анализа ...

1 Ответ

2 голосов
/ 20 марта 2019

Вы можете избавиться от exp() и log():

testB <- 1 - Rfast::rowprods(1-A*z)

Это в 8 раз быстрее.

Тем не менее, поскольку вы умножаете много чисел от 0 до 1, выв конечном итоге 0 везде, поэтому выходной вектор равен 1 с ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...