2014-07-01 8 views
5

Ich möchte die scipy.sparse.csr_matrix Klasse mit ein paar Methoden zu ergänzen und ein paar andere für den persönlichen Gebrauch ersetzen. Ich bin ein Kind der Klasse zu machen, die von csr_matrix erbt, als solche:Inherit von scipy.sparse.csr_matrix Klasse

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

Dies wird allerdings nicht funktionieren, werfen:

AttributeError: toSpa not found

Könnten Sie mir bitte erklären, was ich falsch mache?

Antwort

5

Somewhere in the SciPy Sparse Matrix implementation Die ersten drei Buchstaben des Klassennamens werden verwendet, um eine Methode zu definieren, die die Transformationen zwischen den verschiedenen dünn besetzten Matrixtypen (see this thread) durchführt. Deshalb müssen Sie wie mit einem Namen implementieren:

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'> 

Andere Namen wie csr_mymatrix, csr_test und so würde weiter möglich sein ...

+1

Das etwas eigentümlich ist, danke dies für die Suche! –