考虑N * N矩阵。我选择任何元素然后我想要使用numpy通过它的对角线和antidiagonals的总和。
例如:
boolean
对于数字8,它应返回(2 + 8 + 14)+(4 + 8 + 12 + 16 + 20)。
感谢。
答案 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建议的那样。