2013-03-29 14 views
6

Ho un vettore sparse 988x1 (una colonna in un csr_matrix) creato tramite scipy.sparse. C'è un modo per ottenere la media e la deviazione standard senza dover convertire la matrice sparsa in una densa?Come si ottiene la media e lo standard di una colonna in una csr_matrix?

numpy.mean sembra funzionare solo per i vettori densi.

+0

[Sommare le voci] (http://docs.scipy.org/doc /scipy/reference/generated/scipy.sparse.csr_matrix.sum.html#scipy.sparse.csr_matrix.sum) e dividere per m * n per calcolare la media. Supponendo che è ciò che la media è per una matrice. Non mi sono mai imbattuto in Matrice significa prima. –

+0

Ciao David, avrei dovuto modificare la mia domanda, sto cercando piuttosto la media e lo standard di un vettore, ma nella sua forma sparsa, c'è un comando in scipy che ti dà quei due valori? – Curious

+0

Quindi, la mia definizione nel commento è accurata? È la somma dei valori 988, divisa per 988? E perché stai usando CSR se lavori con le colonne? –

risposta

7

Poiché si sta eseguendo il taglio delle colonne, potrebbe essere preferibile memorizzare la matrice utilizzando CSC anziché CSR. Ma ciò dipenderebbe da che cosa stai facendo con la matrice.

Per calcolare la media di una colonna in una matrice CSC è possibile utilizzare la funzione mean() della matrice.

Per calcolare la deviazione standard in modo efficiente sarà necessario uno sforzo leggermente maggiore. Prima di tutto, si supponga di ottenere la vostra colonna di tipo sparse in questo modo:

col = A.getcol(colindex) 

quindi calcolare la varianza in questo modo:

N = col.shape[0] 
sqr = col.copy() # take a copy of the col 
sqr.data **= 2 # square the data, i.e. just the non-zero data 
variance = sqr.sum()/N - col.mean()**2 
+5

+1. Un approccio alternativo (plug spudorato per il mio progetto) consiste nell'usare il ['StandardScaler' da scikit-learn] (http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html), che ha un calcolo media + varianza ottimizzato per matrici CSR e CSC. –

+1

@larsmans Ricevo '" Impossibile centrare matrici sparse: passa 'with_mean = False' "' con csr_matrix. – jul

Problemi correlati