2013-04-13 19 views

risposta

4

Se la matrice, consente di chiamare a, vengono memorizzati in formato CSR, quindi a.data ha tutte le voci non nulli ordinati per righe e a.indptr ha l'indice del primo elemento di ogni riga. È possibile utilizzare questo per calcolare ciò che si è dopo come segue:

def sparse_max_row(csr_mat): 
    ret = np.maximum.reduceat(csr_mat.data, csr_mat.indptr[:-1]) 
    ret[np.diff(csr_mat.indptr) == 0] = 0 
    return ret 
2

Mi sono imbattuto in questo stesso problema. La soluzione di Jaime si interrompe se una qualsiasi delle righe nella matrice è completamente vuota. Ecco una soluzione:

def sparse_max_row(csr_mat): 
    ret = np.zeros(csr_mat.shape[0]) 
    ret[np.diff(csr_mat.indptr) != 0] = np.maximum.reduceat(csr_mat.data,csr_mat.indptr[:-1][np.diff(csr_mat.indptr)>0]) 
    return ret 
+0

questo viene a mancare quando nessuna delle voci di dati sono superiori a 0: https://gist.github.com/jni/6120922#file-example-py – Juan

Problemi correlati