如何正确地从scipy.sparse矩阵继承?

时间:2017-07-27 04:41:17

标签: python oop scipy

我尝试通过多重继承将自己的方法和属性添加到稀疏矩阵中。但我发现算术运算符在新类中没有关闭。

from scipy.sparse import coo_matrix
import numpy as np

class Info(object):
    def __init__(self, *arg, **args):
        self.hello = "hello"
    def say_hello(self):
        print("hello")

class A(coo_matrix, Info):
    def __init__(self, *arg, **args):
        super(type(self), self).__init__(*arg, **args)

a = A(np.random.randint(2, size=(3,3)))
print("type of a: ",type(a))
a.say_hello()
b = 2*a
print("type of b: ",type(b))

1 个答案:

答案 0 :(得分:0)

scipy.sparse.coo_matrix的文档中所述,它不直接支持算术运算。显然,如果你仍然尝试做算术,它会自动转换为csr_matrix。这就是您的b不再是__main__.A类型的原因。但是,如果您通过执行

直接继承表单,例如csr_matrix
class A(csr_matrix, Info):
    ...

这有适用于算术的方法,因此可以在不转换为其他格式的情况下工作。