我正在使用 numpy。我的任务是:
“编写一个函数 sumOfDiagonal,它有一个列表类型的参数。列表是一个 4x4 的二维 整数数组(4 行和 4 列整数)。该函数返回整数的总和 从左上角到右下角的对角线位置。该函数应为列表返回 14 以下。您可以假设该列表始终是一个 4x4 二维整数数组。 4 9 2 5
3 1 10 6
7 2 5 1
8 8 1 4"
我在这方面非常挣扎。我尝试了几种方法但一无所获。起初我试过:
def sumOfDiagonal (list1: list):
summation1=[i.split(", ")[0] for i in list1]
返回(求和1)
print (sumOfDiagonal ([[4, 9, 2, 5], [3, 1, 10, 6], [7, 2, 5, 1], [8, 8, 1, 4,]]) )
因为我在另一个线程上看到据说可以做到这一点,并且我认为我可以将输入数组拆分为各个列表以帮助开始,但是我得到了一个关于没有属性的错误......我刚刚又试了一次,我得到了关于调用外部函数的错误
然后我在另一个方向做了几次其他尝试。我现在拥有的是:
def sumOfDiagonal (list1: list):
i=0
j=0
summation1=0
for row in list1:
for i in row:
for column in list1:
for j in column:
summation1=list1[i j],row[i]+summation1
返回(求和1)
print (sumOfDiagonal ([[4, 9, 2, 5], [3, 1, 10, 6], [7, 2, 5, 1], [8, 8, 1, 4,]]) )
这显然是行不通的,但我之前有一些没有语法错误的版本,只有逻辑错误(输出 44)
我觉得应该是
def sumOfDiagonal (list1: list):
i=0
j=0
summation1=0
summation2=0
for row in list1:
summation1=row[1]+summation1
i+=i
for column in list1:
summation2=column[i]+summation2
i+=i
返回(求和1+求和2)
print (sumOfDiagonal ([[4, 9, 2, 5], [3, 1, 10, 6], [7, 2, 5, 1], [8, 8, 1, 4,]]) )
我是否接近于正确,我该如何纠正我的大量失败?
提前致谢
最佳答案
当我手找一个矩阵的迹时,我先看左上角,然后将它添加到第二行的第二个元素,然后是第三行的第三个元素,依此类推。这将指导我们在这里。这可能是编程逻辑灵感的一个很好的来源 - 如果您可以通过算法手动完成,您就可以对其进行编程。
总之,我觉得你想多了。这里有两个选项,假设有一个列表列表,如您的示例所示。
def sumOfDiagonal(matrix):
sum = 0
for i in range(len(matrix)):
sum += matrix[i][i] #These are the diagonal elements
return sum
或者,如果您想一次完成所有操作并发现 range(len(x))
是非 pythonic 的,
def sumOfDiagonal2(matrix):
return sum([matrix[i][i] for i,_ in enumerate(matrix)])
关于python - 如何在 Python 3.3.5 中添加矩阵的对角线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26321545/