如何在 R 的稀疏矩阵中找到 min/max 值的索引?

How to find the index of the min/max value in a sparse matrix in R?

我有一个这样的矩阵:

> A
9 x 9 sparse Matrix of class "dgCMatrix"
     1    2    3    4    5    6    7    8    9
1 .    0.48 0.10 0.04 .    .    .    .    .   
2 0.48 .    0.10 0.66 0.88 .    .    .    .   
3 0.10 0.10 .    0.59 0.38 .    .    .    .   
4 0.04 0.66 0.59 .    0.46 0.62 .    .    .   
5 .    0.88 0.38 0.46 .    .    .    .    .   
6 .    .    .    0.62 .    .    0.78 0.78 0.16
7 .    .    .    .    .    0.78 .    0.89 0.20
8 .    .    .    .    .    0.78 0.89 .    0.77
9 .    .    .    .    .    0.16 0.20 0.77 .   

我想在 A 中找到最小值和最大值的索引,而不将 A 转换为普通(非稀疏)矩阵。有什么基本的解决办法吗?

dput(A)的输出是:

new("dgCMatrix", i = c(1L, 2L, 3L, 0L, 2L, 3L, 4L, 0L, 1L, 3L, 
4L, 0L, 1L, 2L, 4L, 5L, 1L, 2L, 3L, 3L, 6L, 7L, 8L, 5L, 7L, 8L, 
5L, 6L, 8L, 5L, 6L, 7L), p = c(0L, 3L, 7L, 11L, 16L, 19L, 23L, 
26L, 29L, 32L), Dim = c(9L, 9L), Dimnames = list(c("1", "2", 
"3", "4", "5", "6", "7", "8", "9"), c("1", "2", "3", "4", "5", 
"6", "7", "8", "9")), x = c(0.48, 0.1, 0.04, 0.48, 0.1, 0.66, 
0.88, 0.1, 0.1, 0.59, 0.38, 0.04, 0.66, 0.59, 0.46, 0.62, 0.88, 
0.38, 0.46, 0.62, 0.78, 0.78, 0.16, 0.78, 0.89, 0.2, 0.78, 0.89, 
0.77, 0.16, 0.2, 0.77), factors = list())

我只是举个例子:

require(Matrix)

A <- matrix(1:100, nrow=10) %% 15
A[A < 7] <- 0
A <- Matrix(A, sparse=T)

是的,这是一个稀疏矩阵:

> A
10 x 10 sparse Matrix of class "dgCMatrix"
                                   
 [1,]  . 11  .  . 11  .  . 11  .  .
 [2,]  . 12  7  . 12  7  . 12  7  .
 [3,]  . 13  8  . 13  8  . 13  8  .
 [4,]  . 14  9  . 14  9  . 14  9  .
 [5,]  .  . 10  .  . 10  .  . 10  .
 [6,]  .  . 11  .  . 11  .  . 11  .
 [7,]  7  . 12  7  . 12  7  . 12  7
 [8,]  8  . 13  8  . 13  8  . 13  8
 [9,]  9  . 14  9  . 14  9  . 14  9
[10,] 10  .  . 10  .  . 10  .  . 10

对其进行逻辑测试工作正常

> A == max(A)
10 x 10 sparse Matrix of class "lgCMatrix"
                         
 [1,] . : . . : . . : . .
 [2,] . : : . : : . : : .
 [3,] . : : . : : . : : .
 [4,] . | : . | : . | : .
 [5,] . . : . . : . . : .
 [6,] . . : . . : . . : .
 [7,] : . : : . : : . : :
 [8,] : . : : . : : . : :
 [9,] : . | : . | : . | :
[10,] : . . : . . : . . :

我们可以毫无问题地获得 max(A) 的行和列索引:

> which(A == max(A), arr.ind=T)
     row col
[1,]   4   2
[2,]   9   3
[3,]   4   5
[4,]   9   6
[5,]   4   8
[6,]   9   9

我建议您弄清楚这些步骤中有哪些没有提供应有的输出。