Насколько большие матрицы scipy.csr_matrix могут быть выполнены точечным произведением? - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь выполнить точечное произведение с большими массивами

L_mat=csr_matrix(L_mat)
# L_mat is (24, 1226880)

L_mat_t=csr_matrix(L_mat_t)
# L_mat_t is (1226880, 24)

# Following is possible?
LT_dot_L=L_mat_t.dot(L_mat)
# I'm expecting (1226880, 1226880) but when I did this, 
# I got MemoryError

Я получил такой же MemoryError, когда я выполнил меньший массив

(523776, 24) dot (24, 523776)

Это может быть выполнено

(24, 523776) dot (523776, 24) = (24, 24)

Как выполнить точечный продукт с большим массивом с помощью csr_matrix или другими способами?

1 Ответ

0 голосов
/ 23 октября 2018

Я не собираюсь пытаться из-за ошибки памяти, но рассмотрим этот тест

In [300]: from scipy import sparse
In [301]: M = sparse.random(10,10000, format='csr')
In [302]: M
Out[302]: 
<10x10000 sparse matrix of type '<class 'numpy.float64'>'
    with 1000 stored elements in Compressed Sparse Row format>
In [303]: M.dot(M.T)
Out[303]: 
<10x10 sparse matrix of type '<class 'numpy.float64'>'
    with 66 stored elements in Compressed Sparse Row format>
In [304]: M.T.dot(M)
Out[304]: 
<10000x10000 sparse matrix of type '<class 'numpy.float64'>'
    with 100310 stored elements in Compressed Sparse Column format>

M разреженность равна 0,01, Out[304] равна 0,001, но все же есть в 100 раз больше ненулевых значений,С матрицей (1226880, 1226880) я легко могу представить себе матрицу, которая не умещается в памяти, даже если она скудна.

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