矩阵中对角元素的总和

Has*_*mam 17 python matrix

我试图找出矩阵中对角线元素的总和.这里,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)]给你两次相同的和.