2014-07-01 17 views
5

Desidero aumentare la classe scipy.sparse.csr_matrix con alcuni metodi e sostituirne alcuni altri per uso personale. Sto facendo una classe figlia che eredita da csr_matrix, come ad esempio:Eredita dalla classe scipy.sparse.csr_matrix

class SparseMatrix(sp.csr_matrix): 
    def __init__(self, matrix): 
     super(type(self), self).__init__(matrix) 

questo non funziona, però, gettando:

AttributeError: toSpa not found

Potrebbe spiegare a me quello che sto facendo di sbagliato?

risposta

5

Somewhere in the SciPy Sparse Matrix implementation le prime tre lettere del nome classe vengono utilizzate per definire un metodo che eseguirà le trasformazioni tra i diversi tipi di matrice sparse (see this thread). Pertanto, è necessario implementare utilizzando un nome come:

import numpy as np 
from scipy.sparse import csr_matrix 

class csr_matrix_alt(csr_matrix): 
    def __init__(self, *args, **kwargs): 
     super(csr_matrix_alt, self).__init__(*args, **kwargs) 

s = csr_matrix_alt(np.random.random((10, 10))) 
print(type(s)) 
#<class '__main__.csr_matrix_alt'> 

Altri nomi come csr_mymatrix, csr_test e così via, sarebbe possibile ...

+1

Questo è un po 'particolare, grazie per trovare questo! –

Problemi correlati