Арифметические / логические операции с большими разреженными тензорами в R - PullRequest
1 голос
/ 26 июня 2019

Мне нужно быстро выполнить вычисления (+, *,>) с большими трехмерными массивами (тензорами) в R (например, 1500 x 150 x 30000).Поскольку эти массивы очень разрежены (только 0,03% записей не являются нулями), я сначала использую функцию as_sptensor из библиотеки 'tenorr', чтобы преобразовать мои тензоры в разреженные, такие как:

x <- array (data = c(1,0,0,0,0,0,0,1,1,1,1,1), dim = c (3,2,2)) </p>

s <- as_dtensor (x)</p>

s1 <- as_sptensor (s) </p>

А затем я делаю некоторые арифметические операции, например, умножение:

s1 * s1

У меня также есть ограничения памятивсего 8 ГБ, что также помогает мне сохранить результат.

Проблема в том, что когда я имею дело с большими тензорами, такими как:

A <-some_index_matrix [1: 3,1: 1000000] </p>

A2 <- спенсор (A, rep (1, ncol (A)), dims = c (max (A [1,]), max (A [2,]), max (A [3,]))) </p>

A2 * A2

Мне не удалось получить результат этого продукта в разумные сроки.Как я могу оптимизировать мой код для таких вычислений, которые будут выполнены в течение нескольких секунд?

...