Python 在稀疏矩阵中查找对角线上特定值对应的行索引
我有一个关于稀疏矩阵的问题。 我从矩阵a开始: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]])
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])