Это разреженная матрица, и, как таковая, вы будете гораздо лучше ссылаться на ненулевые записи: это сэкономит вам ОЗУ и упростит автоматическое создание матрицы.
Каждая записьиндексируется как (i, j, x), ссылаясь на строку, столбец и значение.Предположим, что у вас есть N (скажем, N = 10) строк, которые вы хотите заполнить, тогда вы создаете 2 записи в строке (проиндексировано i
, в коде ниже);каждый столбец используется только один раз, поэтому существует 2 * N уникальных значений столбца.Каждая ненулевая запись равна 1.
Код для ее создания:
N = 10
i = rep(1:N, each = 2)
j = 1:(2*N)
v = 1
library(Matrix)
mat = sparseMatrix(i = i, j = j, x = v)
Полученная матрица:
> mat
10 x 20 sparse Matrix of class "dgCMatrix"
[1,] 1 1 . . . . . . . . . . . . . . . . . .
[2,] . . 1 1 . . . . . . . . . . . . . . . .
[3,] . . . . 1 1 . . . . . . . . . . . . . .
[4,] . . . . . . 1 1 . . . . . . . . . . . .
[5,] . . . . . . . . 1 1 . . . . . . . . . .
[6,] . . . . . . . . . . 1 1 . . . . . . . .
[7,] . . . . . . . . . . . . 1 1 . . . . . .
[8,] . . . . . . . . . . . . . . 1 1 . . . .
[9,] . . . . . . . . . . . . . . . . 1 1 . .
[10,] . . . . . . . . . . . . . . . . . . 1 1
Просто используйте код выше иустановите N = 10000, и у вас будет ваша матрица.
В качестве дополнительного бонуса: ваша желаемая матрица (N = 1E5) потребляет всего 321424 байта.Напротив, стандартная плотная матрица размером 10K x 20K займет 1,6 ГБ, используя числовые (т.е. 8-байтовые) записи.Как они сказали в «Контакте»: это похоже на ужасную трату пространства, верно?