按元素划分的问题是,如果矩阵都是稀疏的,那么你会有很多
Inf
和
NaN
结果,这些使其致密。这就是为什么你会出现内存不足的错误。
如果要替换
Inf公司
和
硝酸钠
如果结果为零,那么解决方案相对容易,您只需获得
summary()
并直接使用索引和值。
您需要限制
A
和
B
将向量索引到它们的交集并对其执行除法。要获得索引对的交集,可以使用
merge()
。
以下是一个快速而肮脏的实现:
# Some example data
A <- sparseMatrix(i=c(1,1,2,3), j=c(1,3,1,3), x=c(1,1,2,3))
B <- sparseMatrix(i=c(3,2,1), j=c(3,2,1), x=c(3,2,1))
sdiv <- function(X, Y, names=dimnames(X)) {
sX <- summary(X)
sY <- summary(Y)
sRes <- merge(sX, sY, by=c("i", "j"))
sparseMatrix(i=sRes[,1], j=sRes[,2], x=sRes[,3]/sRes[,4],
dimnames=names)
}
sdiv(A, B)
# 3 x 3 sparse Matrix of class "dgCMatrix"
#
# [1,] 1 . .
# [2,] . . .
# [3,] . . 1
感谢flodel关于使用的建议
summary
和
merge
。