如何在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,] : . . : . . : . . :

我们可以得到row &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

我建议你弄清楚这些步骤中哪一个没有给你它应该给你的输出。

最新更新