在numpy中获取矩阵的对角线并排除元素

时间:2018-12-11 18:22:59

标签: python numpy

我正在尝试获取矩阵的对角元素,但不包括一个对角元素。如果我想要完整的对角线元素,我知道我可以简单地做A.numpy.diagonal(),其中A是一个numpy方阵,以获得完整的对角线元素数组。但是我不想要A[i][i]来使用i。因此很明显,我可以从i的输出中删除与A.numpy.diagonal()相对应的元素。但是我认为这比使用切片慢吗?在此问题上如何使用切片来获得除A[i][i]处的分量以外的所有对角线元素?

1 个答案:

答案 0 :(得分:2)

只需对行和列使用diagonal,就可以实现与arange相同的行为。在建立索引之前删除您不感兴趣的索引(如@hpaulj在注释中指出的那样,实际上,找到对角线并随后删除索引会更快):


设置

a = np.arange(25).reshape(5,5)
i = 3     # exclude the diagonal element at index 3

array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24]])

d = np.arange(a.shape[0])
m = np.delete(d, i)

a[m, m]

array([ 0,  6, 12, 24])