使用numpy获得对角线和反对角线2D N * N矩阵的总和

时间:2016-09-06 23:52:41

标签: python-2.7 numpy

考虑N * N矩阵。我选择任何元素然后我想要使用numpy通过它的对角线和antidiagonals的总和。

例如:

boolean

对于数字8,它应返回(2 + 8 + 14)+(4 + 8 + 12 + 16 + 20)。

感谢。

1 个答案:

答案 0 :(得分:3)

使用np.diag。假设您选择元素a[i, j]。然后,

>>> diagonal = np.diag(a, j-i)
>>> antidiagonal = np.diag(a[:, ::-1], N-j-1-i)
>>> np.sum(diagonal) + np.sum(antidiagonal)

这样可行,因为j-i是对角条目(i, i)上方 列的列数。因此np.diag(a, j-i)正确选择对应于8的对角线。

对于反对角线,我只是水平翻转阵列(通过反转列),然后再次运行np.diag。但现在,新列索引为N-j-1,而行索引仍为i

如果您发现a[:, ::-1]不可读,则可以使用np.fliplr(a)np.flipud(a)代替,正如Eric建议的那样。