我试图找出矩阵中对角线元素的总和.这里,n是方阵的大小,a是矩阵.有人可以向我解释这里发生了什么.
n = 3
a = [[11,2,4],[4,5,6],[10,8,-12]]
sum_first_diagonal = sum(a[i][i] for i in range(n))
sum_second_diagonal = sum(a[n-i-1][n-i-1] for i in range(n))
print(str(sum_first_diagonal)+" "+str(sum_first_diagonal))
Run Code Online (Sandbox Code Playgroud)
ibl*_*asi 15
使用numpy库,它对任何矩阵计算都很有用.对于您的具体情况:
import numpy as np
a = [[11,2,4],[4,5,6],[10,8,-12]]
b = np.asarray(a)
print 'Diagonal (sum): ', np.trace(b)
print 'Diagonal (elements): ', np.diagonal(b)
Run Code Online (Sandbox Code Playgroud)
您可以使用pip或其他方式在许多网站上轻松安装numpy.
如果你想要所有的对角线,而不仅仅是主对角线,请检查这个也使用numpy.
编辑
mhawke,如果你想计算反对角线(二级对角线),如维基百科中所述,你可以在numpy中翻转矩阵
import numpy as np
a = [[11,2,4],[4,5,6],[10,8,-12]]
b = np.asarray(a)
b = np.fliplr(b)
print 'Antidiagonal (sum): ', np.trace(b)
print 'Antidiagonal (elements): ', np.diagonal(b)
Run Code Online (Sandbox Code Playgroud)
mha*_*wke 14
试试这个来总结你的第二个对角线:
sum(a[i][n-i-1] for i in range(n))
Run Code Online (Sandbox Code Playgroud)
内部循环访问这些条目:
>>> n = 3
>>> [(i, n-i-1) for i in range(n)]
[(0, 2), (1, 1), (2, 0)]
Run Code Online (Sandbox Code Playgroud)
并且样本矩阵的此对角线的总和值为:
>>> n = 3
>>> sum(a[i][n-i-1] for i in range(n))
19
Run Code Online (Sandbox Code Playgroud)
代码中的错误是对两个维使用相同的表达式:
a[n-i-1][n-i-1]
Run Code Online (Sandbox Code Playgroud)
这将以相反的顺序再次处理第一个对角线,[(2, 2), (1, 1), (0, 0)]给你两次相同的和.