Python 从scipy.sparse.csr_矩阵类继承

Python 从scipy.sparse.csr_矩阵类继承,python,scipy,subclass,sparse-matrix,Python,Scipy,Subclass,Sparse Matrix,我想用一些方法扩充scipy.sparse.csr_matrix类,并替换一些其他方法供个人使用。我正在创建一个子类,它继承自csr\u矩阵,例如: class SparseMatrix(sp.csr_matrix): def __init__(self, matrix): super(type(self), self).__init__(matrix) 但这不起作用,抛出: AttributeError:找不到toSpa 你能解释一下我做错了什么吗?类名的前三个字母用

我想用一些方法扩充
scipy.sparse.csr_matrix
类,并替换一些其他方法供个人使用。我正在创建一个子类,它继承自
csr\u矩阵
,例如:

class SparseMatrix(sp.csr_matrix):
    def __init__(self, matrix):
        super(type(self), self).__init__(matrix)
但这不起作用,抛出:

AttributeError:找不到toSpa

你能解释一下我做错了什么吗?

类名的前三个字母用于定义一个方法,该方法将在不同的稀疏矩阵类型()之间进行转换。因此,您必须使用以下名称来实现:

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'>
将numpy导入为np
从scipy.sparse导入csr_矩阵
类别csr\u矩阵\u alt(csr\u矩阵):
定义初始化(self,*args,**kwargs):
超级(csr_矩阵_alt,self)。_初始___(*args,**kwargs)
s=csr_矩阵_alt(np.random.random((10,10)))
打印(打印)
#

其他名称,如
csr\u mymatrix
csr\u test
等等都是可能的…

看起来三个字母的代码逻辑已经改变了。这里有一个链接,指向选择前三个字母的行,这是SciPy v0.16.1的一部分:。