Learn R Programming

Matrix (version 0.99875-2)

spMatrix: Sparse Matrix Constructor From Triplet

Description

User friendly construction of a sparse matrix (inheriting from class TsparseMatrix) from the triplet representation.

Usage

spMatrix(nrow, ncol, i, j, x)

Arguments

nrow, ncol
integers specifying the desired number of rows and columns.
i,j
integer vectors of the same length specifying the locations of the non-zero (or non-TRUE) entries of the matrix.
x
atomic vector of the same length as i and j, specifying the values of the non-zero entries.

Value

  • A sparse matrix in triplet form, as an Robject inheriting from both TsparseMatrix and generalMatrix.

    The matrix $M$ will have M[i[k], j[k]] == x[k], for $k = 1,2,\ldots, n$, where n = length(i) and M[ i', j' ] == 0 for all other pairs $(i',j')$.

See Also

Matrix(*, sparse=TRUE) for the more usual constructor of such matrices; further bdiag and Diagonal for (block-)diagonal matrix constructors.

Consider TsparseMatrix and similar class definition help files.

Examples

Run this code
## simple example
A <- spMatrix(10,20, i = c(1,3:8),
                     j = c(2,9,6:10),
                     x = 7 * (1:7))
A # a "dgTMatrix"
summary(A)
str(A) # note that *internally* 0-based indices (i,j) are used

L <- spMatrix(9, 30, i = rep(1:9, 3), 1:27,
              (1:27) %% 4 != 1)
L # an "lgTMatrix"

### This is a useful utility, to be used for experiments :

 rSpMatrix <- function(nrow, ncol, nnz,
                       rand.x = function(n) round(rnorm(nnz), 2))
 {
     ## Purpose: random sparse matrix
     ## --------------------------------------------------------------
     ## Arguments: (nrow,ncol): dimension
     ##          nnz  :  number of non-zero entries
     ##         rand.x:  random number generator for 'x' slot
     ## --------------------------------------------------------------
     ## Author: Martin Maechler, Date: 14.-16. May 2007
     stopifnot((nnz <- as.integer(nnz)) >= 0,
               nrow >= 0, ncol >= 0,
               nnz <= nrow * ncol)
     spMatrix(nrow, ncol,
              i = sample(nrow, nnz, replace = TRUE),
              j = sample(ncol, nnz, replace = TRUE),
              x = rand.x(nnz))
 }

 M1 <- rSpMatrix(100000, 20, nnz = 200)
 summary(M1)

Run the code above in your browser using DataLab