返回0表示不存在的值

时间:2015-02-02 00:51:04

标签: python-3.x dictionary sparse-matrix

我正在尝试构建一个稀疏矩阵,让我说我正在尝试像这样初始化类:

m = Sparse_Matrix(3,3, (0,0,0),(0,1,10),(0,2,11),(1,0,9),(1,2,8),(2,0,7),(2,1,8))

如果我调用m.row(0),那么将返回该行中的所有值,所以:

m.row(0) -> (0,10,11)

然而,鉴于稀疏矩阵没有(1,1)的任何值,并且我应该为该索引返回0,我将如何进行此操作?所以,例如, 如果我打电话:

m.row(1) -> (9,0,8)

这是我的代码

def row(self, value:int):
    row_list = []
    for key in self.list_of_tuples:
        print(key)
        if value == key[0]:
            row_list.append(self.matrix.get((key[0], key[1]),0))
            print(row_list)
    return tuple(row_list)

在我的代码中,self.matrix是一个字典,其键是索引的元组,其值是与该键对应的值。所以,例如,我会

{(0,1):10, (0,2):11, (1,0):9, (1,2):8, (2,0):7, (2,1):8}

如果特定索引的值为0,那么我不会将其添加到字典中。

编辑:我不允许使用scipy.sparse。

1 个答案:

答案 0 :(得分:1)

由于您没有发布课程的其他内容,我不知道内部实施细节是什么样的,但是如何:

class SparseMatrix:
    def __init__(self, rows: int, cols: int, *entries):
        self.rows = rows
        self.cols = cols
        self.matrix = dict()
        for entry in entries:
            self.matrix[(entry[0], entry[1])] = entry[2]

    def row(self, row_num: int):
        return [self.matrix.get((row_num, i), 0) for i in range(self.cols)]

然后:

>>> m = SparseMatrix(3, 3, (0,0,0), (0,1,10), (0,2,11), (1,0,9), (1,2,8), (2,0,7), (2,1,8))
>>> m.row(0)
[0, 10, 11]
>>> m.row(1)
[9, 0, 8]