我有一个与稀疏矩阵有关的问题.我从一个矩阵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多个条目)。
import scipy as sparse
M = sparse.csr_matrix(A)
现在,我需要从中提取对角线(没有问题)。
M.diagonal()
Out: array([2, 4, 3, 3, 2, 1])
而... 我被卡住了...
在对角线上,我想检查所有具有特定值的条目,比如说4,并评估所有在对角线上找到4的行指数。在这个特定的例子中,这将产生类似于:[1] 的结果。
从这些指数中,我需要评估稀疏矩阵的所有行值(不包括对角线),并找到最大值,在这种情况下,应该是=2。
另一个例子,如果我寻找2,行指数应该是:[0],[4],最大值=0(因为0是稀疏矩阵第0行和第4行的最大值)。
如果有任何帮助,将非常感谢!
你可以访问其中对角线等于某个值的指数,例如 val
,通过
indices = M.diagonal()==val
然后,我们可以将对角线从 M
通过公认的答案 这个问题:
M -= sparse.dia_matrix((M.diagonal()[scipy.newaxis, :], [0]), shape=M.shape)
最后找到修改后的行的最大值。M
选定 indices
:
np.max(M[indices])