gpt4 book ai didi

r - 高效获取稀疏矩阵的非零元素坐标

转载 作者:行者123 更新时间:2023-12-04 18:20:33 27 4
gpt4 key购买 nike

我想获取矩阵 M 中所有非零元素的行列坐标。如果 M 不是太大,它很简单:

m <- matrix(sample(0:1, 25, TRUE, prob=c(0.75, 0.25)), 5, 5)

#[,1] [,2] [,3] [,4] [,5]
#[1,] 0 0 0 0 0
#[2,] 1 1 0 0 0
#[3,] 0 0 0 1 0
#[4,] 0 0 1 0 0
#[5,] 0 0 0 0 0

nz <- which(m != 0)
cbind(row(m)[nz], col(m)[nz])

#[,1] [,2]
#[1,] 2 1
#[2,] 2 2
#[3,] 4 3
#[4,] 3 4

但是,在我的例子中,M 是一个稀疏矩阵(使用 Matrix 包创建),其维度可能非常大。如果我像上面那样调用 row(M)col(M),我将生成几个与 M 大小相同的密集矩阵>,我绝对不想这样做。

有没有办法在不创建密集矩阵的情况下获得上述结果?

最佳答案

我觉得你想要

which(m!=0,arr.ind=TRUE)

查看 showMethods("which"),这似乎是为了有效处理稀疏矩阵而设置的。您还可以通过操纵内部 @p(列指针)和 @i(行指针)更直接地(但难以理解地)获得面向列的稀疏矩阵的答案)插槽:

mm <- Matrix(m)
dp <- diff(mm@p)
cbind(mm@i+1,rep(seq_along(dp),dp))

关于r - 高效获取稀疏矩阵的非零元素坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49431559/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com