在稀疏矩阵中寻找对应于对角线上的特定值的行指数。

问题描述 投票:1回答: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多个条目)。

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行的最大值)。

如果有任何帮助,将非常感谢!

python python-3.x sparse-matrix
1个回答
1
投票

你可以访问其中对角线等于某个值的指数,例如 val,通过

indices = M.diagonal()==val

然后,我们可以将对角线从 M 通过公认的答案 这个问题:

M -= sparse.dia_matrix((M.diagonal()[scipy.newaxis, :], [0]), shape=M.shape)

最后找到修改后的行的最大值。M 选定 indices:

np.max(M[indices])
© www.soinside.com 2019 - 2024. All rights reserved.