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



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

只需对行和列使用arange,就可以实现与diagonal相同的行为。在索引之前删除你不感兴趣的索引(正如@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])

最新更新