Per espandere sulla conversione di una matrice coo
per csr
all'indice, ecco alcuni tempi per una piccola matrice sparsa
Effettuare la matrice
In [158]: M=sparse.coo_matrix([[0,1,2,0,0],[0,0,0,1,0],[0,1,0,0,0]])
In [159]: timeit M[1,2]
TypeError: 'coo_matrix' object is not subscriptable
In [160]: timeit M.tocsc()[1,2]
1000 loops, best of 3: 375 µs per loop
In [161]: timeit M.tocsr()[1,2]
1000 loops, best of 3: 241 µs per loop
In [162]: timeit M.todok()[1,2]
10000 loops, best of 3: 65.8 µs per loop
In [163]: timeit M.tolil()[1,2]
1000 loops, best of 3: 270 µs per loop
Apparentemente per la selezione di un singolo elemento, dok
, è fastests (contando il tempo di conversione). Questo formato è in realtà un dizionario, che ovviamente ha un accesso veloce agli elementi.
Tuttavia, se si accede frequentemente a intere righe o intere colonne o iterando su righe o colonne, è necessario leggere i documenti con maggiore attenzione e potrebbe essere necessario eseguire i propri test di tempo sugli array tipici.
Se si impostano valori, non solo li leggono, i tempi e persino l'implementazione possono essere diversi. Si riceverà un avviso di efficienza se si tenta di modificare un elemento 0
di un formato csr
o csc
.
'mymatrix [i, j]' – Jaime
L'ho provato. Ottengo il seguente errore: TypeError: l'oggetto 'coo_matrix' non ha attributo '__getitem__' – haripkannan
Guarda gli altri formati sparsi – hpaulj