Сколько места нужно для ячейки матрицы R со значением 0? И как бороться с большим матричным расчетом - PullRequest
3 голосов
/ 24 июня 2019

Я хочу вычислить корреляцию для матрицы, но остановлен программой, так как память не может уместиться.

M = matrix(0, length(user), length(mat))   

когда я запускаю эту строку, я получаю сообщение

Ошибка: невозможно выделить вектор размером 146487,5 Гбайт

FYI

length(user) = 6728367
length(mat) = 2922138

, так сколько места должно занимать ячейка матрицы с 0 значениями?

И еще, как обращаться с матричным вычислением на основе разреженной матрицы?Есть ли пакет?или я могу сделать многоядерный расчет?

1 Ответ

3 голосов
/ 24 июня 2019

Сколько места требуется, указано в сообщении об ошибке: 146 487,5 ГБ.

Если вам нужна такая большая матрица, просто используйте разреженную матрицу:

library(Matrix)
user = 6728367
mat = 2922138
M = Matrix(0, user, mat)  

Это будет работать:

> str(M)
Formal class 'dgCMatrix' [package "Matrix"] with 6 slots
  ..@ i       : int(0) 
  ..@ p       : int [1:2922139] 0 0 0 0 0 0 0 0 0 0 ...
  ..@ Dim     : int [1:2] 6728367 2922138
  ..@ Dimnames:List of 2
  .. ..$ : NULL
  .. ..$ : NULL
  ..@ x       : num(0) 
  ..@ factors : list()

Здесь есть учебник , и вы можете найти гораздо больше в Интернете. Математические вычисления оптимизированы с пакетом, поэтому что-то вроде M * M также будет работать быстро. Также вы можете проверить здесь

...