矩阵中对角线元素的总和

新手上路,请多包涵

我试图找出矩阵中对角线元素的总和。这里,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))

原文由 Hassan Imam 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 306
2 个回答

试试这个来总结你的第二个对角线:

 sum(a[i][n-i-1] for i in range(n))

内部循环访问这些条目:

 >>> n = 3
>>> [(i, n-i-1) for i in range(n)]
[(0, 2), (1, 1), (2, 0)]

样本矩阵的这条对角线的总和值为:

 >>> n = 3
>>> sum(a[i][n-i-1] for i in range(n))
19

您的代码中的错误是对两个维度使用相同的表达式:

 a[n-i-1][n-i-1]

这将以相反的顺序再次处理第一个对角线 [(2, 2), (1, 1), (0, 0)] 给你两次相同的总和。

原文由 mhawke 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用对任何矩阵计算都很强大的 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))

您可以使用 pip 或您可以在许多网站上找到的其他方式轻松安装 numpy。

如果你想要所有的对角线,而不仅仅是主对角线,检查 这个 也使用 numpy。

编辑

mhawke,如果你想计算反对角线(次对角线),如 wikipedia 中所述,你可以在 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))

原文由 iblasi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题