Манипулирование матрицей в Python: добавление значений справа и снизу элемента к этому элементу - PullRequest
0 голосов
/ 25 февраля 2019

Я очень новичок в кодировании, поэтому, пожалуйста, потерпите меня.

Допустим, у меня есть 2d список M = [[3, 0, 2, 18],[-1, 1, 3, 4],[-2, -3, 18, 7]] означает символизировать матрицу

[3, 0, 2, 18]
[-1, 1, 3, 4]
[-2, -3, 18, 7]

Я бы хотелнайти скомпилированное значение (CV) каждого элемента, добавив значения, добавив значения справа и снизу от элемента к этому элементу

, например,

CV [2,3]дает мне 7 + 0 + 0 = 7, поскольку справа и снизу нет элементов

CV [1,3] дает мне 4 + 7 + 0 = 11, поскольку справа от нее нет ячейки

CV [2,2] дает мне 18 + 0 + 7 = 25

CV [1,2] дает мне 1 + 25 + 11 = 39

решенная матрица будетбыть

[216, 132, 70, 29]

[81, 62, 39, 11]

[20, 22, 25, 7]

Как бы узнать CV [0,0]?Мне удалось узнать резюме основного ряда, но после этого он становится слишком грязным.Есть лучший способ сделать это?Я ищу итеративный и рекурсивный способ.Спасибо!

def cv_iterative(m):
    #first row
    matrixnew = []
    total = 0
    base = reversed(m[len(m) - 1])
    baseresult = (list(accumulate(base)))
    basenew = []
    for i in baseresult:
        basenew.append(i)
    basenew = reversed(basenew)
    matrixnew.append(list(basenew))```


  [1]: https://i.stack.imgur.com/sjIk2.png

1 Ответ

0 голосов
/ 25 февраля 2019

Попробуйте:

def cv_iterative(m):    
    for i in range(1, len(m)+1):
        for j in range(1, len(m[-i])+1):

            s = m[-i][-j]

            if j != 1:
                s += m[-i][-j+1]
            if i != 1:
                s += m[-i+1][-j]

            m[-i][-j] = s

    return m

M = [[3, 0, 2, 18],[-1, 1, 3, 4],[-2, -3, 18, 7]]
CV = cv_iterative(M)
print(CV)
print(CV[0][0])

Если вы хотите получить только 216, напишите return m[0][0] вместо return m, а затем:

M = [[3, 0, 2, 18],[-1, 1, 3, 4],[-2, -3, 18, 7]]
print(cv_iterative(M))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...