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

我正在尝试获取矩阵的对角元素,不包括一个对角元素。如果我想全对角线元素,我知道我可以简单地做A.numpy.diagonal()在那里A是一个numpy的方阵,以获得对角线元素的全阵列。但我不想要A[i][i]一些i。所以显然我可以iA.numpy.diagonal(). 但我认为这比使用切片慢?如何在这个问题上使用切片来获取除 处的组件之外的所有对角元素A[i][i]


繁花如伊
浏览 480回答 1
1回答

Helenr

您可以实现与diagonal仅使用arangefor 行和列相同的行为。在建立索引之前删除您不感兴趣的索引(正如@hpaulj 在评论中指出的那样,实际上只是找到对角线并在之后删除索引会更快):设置a = np.arange(25).reshape(5,5)i = 3     # exclude the diagonal element at index 3array([[ 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])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python