Python 在稀疏矩阵中查找对角线上特定值对应的行索引

Python 在稀疏矩阵中查找对角线上特定值对应的行索引,python,python-3.x,sparse-matrix,Python,Python 3.x,Sparse Matrix,我有一个关于稀疏矩阵的问题。 我从矩阵a开始: import numpy as np A = np.array([[ 2, 0, 0, -1, 0, -1], [ 0, 4, -1, 2, -1, 0], [ 0, -1, 3, -1, 1, -1], [-1, 2, -1, 3, -1, -1], [ 0, -1, 1, -1, 2, 0], [-1, 0, -1, -1, 0, 1]])

我有一个关于稀疏矩阵的问题。 我从矩阵a开始:

import numpy as np
A =  np.array([[ 2,  0,  0, -1,  0, -1],
       [ 0,  4, -1,  2, -1,  0],
       [ 0, -1,  3, -1,  1, -1],
       [-1,  2, -1,  3, -1, -1],
       [ 0, -1,  1, -1,  2,  0],
       [-1,  0, -1, -1,  0,  1]])
然后我生成一个稀疏矩阵(这是一个例子,我使用的矩阵有10k个以上的条目)

现在,我需要从中提取对角线(没有问题)

和。。这就是我被困的地方

从对角线开始,我想检查所有具有特定值的条目,比如4,并评估对角线上有4的所有行索引。在这个具体的例子中,这应该是 产生类似于: [1]

从这些索引中,我需要评估稀疏矩阵的所有行值(不包括对角线),并找到最大值,在这种情况下,该值应为=2

另一个示例,如果我查找2,行索引应为: [0]、[4],最大值=0(因为0是稀疏矩阵第0行和第4行中的最大值)


任何帮助都将不胜感激

您可以通过访问对角线等于某个值的索引,例如
val

indices = M.diagonal()==val
然后,我们可以通过以下公认答案从
M
中删除对角线:

最后通过
索引
找到修改后的
M
的最大行数:

np.max(M[indices])

非常感谢你!很好!(另外,我没有足够的声誉来显示upvote,对此表示抱歉!)
indices = M.diagonal()==val
M -= sparse.dia_matrix((M.diagonal()[scipy.newaxis, :], [0]), shape=M.shape)
np.max(M[indices])