Deletes non-structural zeros (i.e., zeros stored explicitly, in memory) from a sparse matrix and returns the result.
drop0(x, tol =0, is.Csparse =NA, give.Csparse =TRUE)
Arguments
x: a Matrix, typically inheriting from virtual class sparseMatrix. denseMatrix and traditional vectors and matrices are coerced to CsparseMatrix, with zeros dropped automatically, hence users passing such x should consider as(x, "CsparseMatrix") instead, notably in the tol = 0 case.
tol: a non-negative number. If x is numeric, then entries less than or equal to tol in absolute value are deleted.
is.Csparse: a logical used only if give.Csparse
is TRUE, indicating if x already inherits from virtual class CsparseMatrix, in which case coercion is not attempted, permitting some (typically small) speed-up.
give.Csparse: a logical indicating if the result must inherit from virtual class CsparseMatrix. If FALSE and x inherits from RsparseMatrix, TsparseMatrix, or indMatrix, then the result preserves the class of x. The default value is TRUE only for backwards compatibility.
Returns
A sparseMatrix, the result of deleting non-structural zeros from x, possibly after coercion.
Note
drop0 is sometimes called in conjunction with zapsmall, e.g., when dealing with sparse matrix products; see the example.
See Also
Function sparseMatrix, for constructing objects inheriting from virtual class sparseMatrix; nnzero.
Examples
(m <- sparseMatrix(i =1:8, j =2:9, x = c(0:2,3:-1), dims = c(10L,20L)))drop0(m)## A larger example:t5 <- new("dtCMatrix", Dim = c(5L,5L), uplo ="L", x = c(10,1,3,10,1,10,1,10,10), i = c(0L,2L,4L,1L,3L,2L,4L,3L,4L), p = c(0L,3L,5L,7:9))TT <- kronecker(t5, kronecker(kronecker(t5, t5), t5))IT <- solve(TT)I. <- TT %*% IT ; nnzero(I.)# 697 ( == 625 + 72 )I.0<- drop0(zapsmall(I.))## which actually can be more efficiently achieved byI.. <- drop0(I., tol =1e-15)stopifnot(all(I.0== Diagonal(625)), nnzero(I..)==625)