Разреженное матричное вычитание - PullRequest
2 голосов
/ 22 апреля 2020

Мне нужно написать функцию, которая получает список словарей (каждый словарь представляет разреженную матрицу) и возвращает словарь матрицы вычитания.

Например: для списка [{(1, 3): 2, (2, 7): 1}, {(1, 3): 6}] необходимо: return {(1, 3): -4, (2, 7): 1}.

Матрицы не обязательно должны быть одинакового размера, список может иметь более двух матриц, а если вычитание равно 0, то оно не должно появляться в конечном словаре.

Мне удалось получить -4, но независимо от того, что я пишу после определения x, я получаю x == -6, и я не могу сказать, почему. Я хочу вставить -4 в качестве нового значения для элемента.

lst = [{(1, 3): 2, (2, 7): 1}, {(1, 3): 6}]
def diff_sparse_matrices(lst):
    result = {}
    for dictionary in lst:
        for element in dictionary:
            if element not in result:
               result[element] = dictionary[element]
            if element in result:
               x = result[element] - dictionary[element]

Ответы [ 2 ]

1 голос
/ 22 апреля 2020
    def diff_sparse_matrices(lst):
    result = lst[0].copy()
    for d in lst[1:]:
        for tup in d:
            if tup in result:
               result[tup] -= d[tup]
            else:
               result[tup] = -d[tup]
    return result  
1 голос
/ 22 апреля 2020
def diff_sparse_matrices(lst):
    result = lst[0].copy()
    for matrix in lst[1:]:
        for coordinates, value in matrix.items():
            result[coordinates] = result.get(coordinates, 0) - value
            if result[coordinates] == 0:
                del result[coordinates]
    return result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...