2012-11-17 4 views
6

Non sembra esserci un metodo in scipy.sparse che fornisce il minimo di una matrice sparsa. In particolare, cerco il minimo delle colonne.minimo di una matrice sparsa?

Nessun metodo visualizzato nel documento e il numero minimo non si applica. Se X è una matrice sparsa, X.min() genera anche l'errore: *** AttributeError: 'module' object has no attribute 'min'.

Sicuramente questo deve essere qualcosa che le persone usano. Come è fatto?

+1

Presumibilmente si intende "elemento minimo non zero". Dopo tutto, una matrice sparsa contiene implicitamente per lo più zeri. – talonmies

+0

No, intendo "minimo". La matrice sparsa può avere voci negative. la risposta di Larsmans dà questo. – gabe

+0

Una voce negativa in una matrice sparsa è anch'essa un valore diverso da zero. – talonmies

risposta

7

Con matrici CSR/CSC, utilizzare

def min_sparse(X): 
    if len(X.data) == 0: 
     return 0 
    m = X.data.min() 
    return m if X.getnnz() == X.size else min(m, 0) 

Per fare questo per riga o colonna, è possibile map questo più o X.getrow(i) for i in X.shape[0]X.shape[1].

Ma hai ragione, questo dovrebbe essere un metodo.

+0

Grazie - sei fantastico! Presenterò alla lista di scipy. – gabe

+0

Inoltre, è utile conoscere l'attributo .data per matrici sparse. (Credo) questo non è menzionato nel tutorial. – gabe

+1

Inoltre, puoi spiegare perché restituisci 'm' se' X.getnnz() == X.size'? Ho appena visto il codice reale e questo dovrebbe sempre essere vero. Vedo che 'm' è ciò che si desidera restituire - ma non capisco la logica di ritorno. – gabe