Py学习  »  Python

python中矩阵的操作:将元素的右边和底部的值添加到该元素中

user11114474 • 5 年前 • 1515 次点击  

我对编码很陌生,所以请容忍我。

假设我有一个二维列表 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

求解的矩阵是

[2161327029]

〔81,62,39,11〕

[20,22,25,7]

我怎么知道[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
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/40669
 
1515 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Heyran.rs
Reply   •   1 楼
Heyran.rs    6 年前

试试这个:

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))