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

标签 python numpy

我正在尝试获取矩阵的对角元素,不包括一个对角元素。如果我想要完整的对角线元素,我知道我可以简单地执行 A.numpy.diagonal() ,其中 A 是一个 numpy 方阵来获取对角线元素的完整数组。但我不想要 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])

关于python - 获取numpy中矩阵的对角线并排除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53730187/

相关文章:

python - 子进程通配符用法

python - 将键盘绑定(bind)添加到现有的 Emacs 模式

python - 你如何在 Linux 中抓取选定的屏幕区域?

python - 没有名为 lxml.html 的模块

python - 如何在 NumPy 中有效计算列式外向量

python - 防止 Pandas 将 None 读作 Nan

python - 在 for 循环内删除 np 数组中的行

python - 如何用Django HTTP.Request处理,请求内容类型,查询参数

python - 使用 numpy.savez() 保存标题信息字典

python - R 翻译成 Python