我在R中有一个非常大的稀疏矩阵。对于指定的行,我想只获取相应列中的非零值(通常是10000个值中的5-10个)。使用查看选项时,只能可视化一个非常小的矩阵子集(我想超出了内存限制)。当我使用A[1,]来获取A的第一行时,我遇到了同样的问题。我想得到一个向量,其中只包含列索引和相应的值,当我指定矩阵的特定行时,其值高于零。有没有聪明的方法来做到这一点?
我在R中有一个非常大的稀疏矩阵。对于指定的行,我想只获取相应列中的非零值(通常是10000个值中的5-10个)。使用查看选项时,只能可视化一个非常小的矩阵子集(我想超出了内存限制)。当我使用A[1,]来获取A的第一行时,我遇到了同样的问题。我想得到一个向量,其中只包含列索引和相应的值,当我指定矩阵的特定行时,其值高于零。有没有聪明的方法来做到这一点?
rowIndx <- 2
mm <- Matrix::Matrix(matrix(rbinom(2e4, 1, 0.10), ncol = 100))
colN <- diff(mm@p) #get the number of non-zero elements in each column
indx <- cbind(mm@i+1,rep(seq_along(colN),colN)) #create the indices of all non-zero elements
获取所需的列索引和值
indx[which(indx[,1]==rowIndx),2] #vector of non-zero column indices
mm[rowIndx,indx[which(indx[,1]==rowIndx),2]] #vector of non-zero values
使用此方法创建索引比使用“which”命令快三倍
indx <- which(mm!=0,arr.ind = T)
对于含有 2e8 元素的大型 dgCMatrix 的方法。
which(A[i,]!>0)
会告诉你第i行中数值大于0的列的位置。 - R18m = matrix(sample(0:3, 100, prob=c(10,1,1, 1), replace=TRUE), 10)
。转换为稀疏矩阵library(Matrix) ; m2 = as(m, "TsparseMatrix")
。查看对象str(m2)
。你可以提取列(j
)m2@j+1
。由于稀疏矩阵的索引从零开始,所以需要加一。值存储在x
中。m2@x
。[顺便说一句:抱歉,我没有看到你的消息-如果你在消息中添加 @username(即@user2957945),用户会收到通知] - user2957945