| Version: | 0.1-55 |
| Title: | Sparse Lightweight Arrays and Matrices |
| Description: | Data structures and algorithms for sparse arrays and matrices, based on index arrays and simple triplet representations, respectively. |
| Depends: | R (≥ 3.4.0) |
| Imports: | stats |
| Enhances: | Matrix, SparseM, spam |
| License: | GPL-2 |
| NeedsCompilation: | yes |
| Packaged: | 2024-11-12 16:45:23 UTC; hornik |
| Author: | Kurt Hornik |
| Maintainer: | Kurt Hornik <Kurt.Hornik@R-project.org> |
| Repository: | CRAN |
| Date/Publication: | 2024-11-13 07:13:31 UTC |
Combine Sparse Arrays
Description
Combine a sequence of (sparse) arrays, matrices, or vectors into a single sparse array of the same or higher dimension.
Usage
abind_simple_sparse_array(..., MARGIN = 1L)
extend_simple_sparse_array(x, MARGIN = 0L)
Arguments
... |
R objects of (or coercible to) class |
MARGIN |
The dimension along which to bind the arrays. |
x |
An object of class |
Details
abind_simple_sparse_array automatically extends the dimensions
of the elements of ‘...’ before it combines them along the
dimension specified in MARGIN. If a negative value is specified
first all elements are extended left of the target dimension.
extend_simple_sparse_array inserts one (or more) one-level
dimension(s) into x to the right of the position(s) specified in
MARGIN, or to the left if specified in negative terms. Note that
the target positions must all be in the range of the dimensions of x
(see Examples).
Value
An object of class simple_sparse_array where the dimnames
are taken from the elements of ‘...’.
Author(s)
Christian Buchta
See Also
simple_sparse_array for sparse arrays.
Examples
## automatic
abind_simple_sparse_array(1:3, array(4:6, c(1,3)))
abind_simple_sparse_array(1:3, array(4:6, c(3,1)), MARGIN = 2L)
## manual
abind_simple_sparse_array(1:3, 4:6)
abind_simple_sparse_array(1:3, 4:6, MARGIN = -2L) ## by columns
abind_simple_sparse_array(1:3, 4:6, MARGIN = -1L) ## by rows
##
a <- as.simple_sparse_array(1:3)
a
extend_simple_sparse_array(a, c( 0L, 1L))
extend_simple_sparse_array(a, c(-1L,-2L)) ## the same
extend_simple_sparse_array(a, c( 1L, 1L))
Apply Functions Over Sparse Matrix Margins
Description
Apply functions to (the cross-pairs of) the rows or columns of a sparse matrix.
Usage
rowapply_simple_triplet_matrix(x, FUN, ...)
colapply_simple_triplet_matrix(x, FUN, ...)
crossapply_simple_triplet_matrix(x, y = NULL, FUN, ...)
tcrossapply_simple_triplet_matrix(x, y = NULL, FUN, ...)
Arguments
x, y |
a matrix in |
FUN |
the name of the function to be applied. |
... |
optional arguments to |
Details
colapply_simple_triplet_matrix temporarily expands each column of
x to dense vector representation and applies the function
specified in FUN.
crossapply_simple_triplet_matrix temporarily expands each cross-pair
of columns of x (and y) to dense vector representation
and applies the function specified in FUN.
Note that if y = NULL then only the entries in the lower triangle
and the diagonal are computed, assuming that FUN is symmetric.
Value
A vector (matrix) of length (dimensionality) of the margin(s)
used. The type depends on the result of FUN.
Note that the result of colapply_simple_triplet_matrix is never
simplified to matrix.
Author(s)
Christian Buchta
See Also
apply for dense-on-dense computations.
Examples
##
x <- matrix(c(1, 0, 0, 2, 1, 0), nrow = 3,
dimnames = list(1:3, LETTERS[1:2]))
x
s <- as.simple_triplet_matrix(x)
colapply_simple_triplet_matrix(s, FUN = var)
##
simplify2array(colapply_simple_triplet_matrix(s, identity))
##
crossapply_simple_triplet_matrix(s, FUN = var)
Matrix Crossproduct
Description
Compute the matrix cross-product of a sparse and a dense or sparse matrix.
Usage
tcrossprod_simple_triplet_matrix(x, y = NULL)
##
crossprod_simple_triplet_matrix(x, y = NULL)
matprod_simple_triplet_matrix(x, y)
Arguments
x, y |
a matrix in |
Details
Function tcrossprod_simple_triplet_matrix implements fast computation
of x %*% t(x) and x %*% t(y) (tcrossprod). The
remaining functions are (optimized) wrappers.
Value
A double matrix, with appropriate dimnames taken from x
and y.
Note
The computation is delegated to tcrossprod if y (or x
if y == NULL) contains any of the special values NA,
NaN, or Inf.
Author(s)
Christian Buchta
See Also
crossprod for dense-on-dense computations.
Examples
##
x <- matrix(c(1, 0, 0, 2, 1, 0), nrow = 3)
x
s <- as.simple_triplet_matrix(x)
tcrossprod_simple_triplet_matrix(s, x)
##
tcrossprod_simple_triplet_matrix(s)
##
tcrossprod_simple_triplet_matrix(s[1L, ], s[2:3, ])
Read and Write Sparse Matrix Format Files
Description
Read and write CLUTO sparse matrix format files, or the CCS format variant employed by the MC toolkit.
Usage
read_stm_CLUTO(file)
write_stm_CLUTO(x, file)
read_stm_MC(file, scalingtype = NULL)
write_stm_MC(x, file)
Arguments
file |
a character string with the name of the file to read or write. |
x |
a matrix object. |
scalingtype |
a character string specifying the type of scaling
to be used, or |
Details
Documentation for CLUTO including its sparse matrix format used to be available from ‘https://www-users.cse.umn.edu/~karypis/cluto/’.
read_stm_CLUTO reads CLUTO sparse matrices, returning a
simple triplet matrix.
write_stm_CLUTO writes CLUTO sparse matrices.
Argument x must be coercible to a simple triplet matrix via
as.simple_triplet_matrix.
MC is a toolkit for creating vector models from text documents (see https://www.cs.utexas.edu/~dml/software/mc/). It employs a variant of Compressed Column Storage (CCS) sparse matrix format, writing data into several files with suitable names: e.g., a file with ‘_dim’ appended to the base file name stores the matrix dimensions. The non-zero entries are stored in a file the name of which indicates the scaling type used: e.g., ‘_tfx_nz’ indicates scaling by term frequency (‘t’), inverse document frequency (‘f’) and no normalization (‘x’). See ‘README’ in the MC sources for more information.
read_stm_MC reads such sparse matrix information with argument
file giving the path with the base file name, and returns a
simple triplet matrix.
write_stm_MC writes matrices in MC CCS sparse matrix format.
Argument x must be coercible to a simple triplet matrix via
as.simple_triplet_matrix.
Row and Column Norms
Description
Compute row and column p-norms.
Usage
row_norms(x, p = 2)
col_norms(x, p = 2)
Arguments
x |
a sparse |
p |
a numeric at least one. Using |
Value
A vector with the row or column p-norms for the given matrix.
Examples
x <- matrix(1 : 9, 3L)
## Row lengths:
row_norms(x)
## Column maxima:
col_norms(x, Inf)
Options for the ‘slam’ package
Description
Function for getting and setting options for the slam package.
Usage
slam_options(option, value)
Arguments
option |
character string indicating the option to get or set (see details). If missing, all options are returned as a list. |
value |
Value to be set. If omitted, the current value is returned. |
Details
Currently, the following options are available:
"max_dense":numeric specifying the maximum
lengthof dense vectors (default:2^24).
See Also
Examples
## save defaults
.slam_options <- slam_options()
.slam_options
slam_options("max_dense", 2^25)
slam_options("max_dense")
## reset
slam_options("max_dense", .slam_options$max_dense)
Rollup Sparse Arrays
Description
Rollup (aggregate) sparse arrays along arbitrary dimensions.
Usage
rollup(x, MARGIN, INDEX, FUN, ...)
## S3 method for class 'simple_triplet_matrix'
rollup(x, MARGIN, INDEX = NULL, FUN = sum, ...,
REDUCE = FALSE)
## S3 method for class 'simple_sparse_array'
rollup(x, MARGIN, INDEX = NULL, FUN = sum, ...,
DROP = FALSE, EXPAND = c("none", "sparse", "dense", "all"),
MODE = "double")
## S3 method for class 'matrix'
rollup(x, MARGIN, INDEX = NULL, FUN = sum, ...,
DROP = FALSE, MODE = "double")
## S3 method for class 'array'
rollup(x, MARGIN, INDEX = NULL, FUN = sum, ...,
DROP = FALSE, MODE = "double")
Arguments
x |
a sparse (or dense) array, typically of numeric or logical values. |
MARGIN |
a vector giving the subscripts (names) of the dimensions to be rolled up. |
INDEX |
a corresponding ( |
FUN |
the name of the function to be applied. |
REDUCE |
option to remove zeros from the result. |
DROP |
option to delete the dimensions of the result which have only one level. |
EXPAND |
the cell expansion method to use (see Details). |
MODE |
the type to use for the values if the result is empty. |
... |
optional arguments to |
Details
Provides aggregation of sparse and dense arrays, in particular fast summation over the rows or columns of sparse matrices in
simple_triplet-form.
If (a component of) INDEX contains NA values the
corresponding parts of x are omitted.
For simple_sparse_array the following cell expansion methods are
provided:
none:The non-zero entries of a cell, if any, are supplied to
FUNas avector.sparse:The number of zero entries of a cell is supplied in addition to above, as a second argument.
dense:Cells with non-zero entries are expanded to a dense
arrayand supplied toFUN.all:All cells are expanded to a dense
arrayand supplied toFUN.
Note that the memory and time consumption increases with the level of expansion.
Note that the default method tries to coerce x to array.
Value
An object of the same class as x where for class
simple_triplet_matrix the values are always of type double
if FUN = sum (default).
The dimnames corresponding to MARGIN are based on (the
components of) INDEX.
Note
Currently most of the code is written in R and, therefore, the memory and time it consumes is not optimal.
Author(s)
Christian Buchta
See Also
simple_triplet_matrix and simple_sparse_array
for sparse arrays.
apply for dense arrays.
Examples
##
x <- matrix(c(1, 0, 0, 2, 1, NA), nrow = 2,
dimnames = list(A = 1:2, B = 1:3))
x
apply(x, 1L, sum, na.rm = TRUE)
##
rollup(x, 2L, na.rm = TRUE)
##
rollup(x, 2L, c(1,2,1), na.rm = TRUE)
## omit
rollup(x, 2L, c(1,NA,1), na.rm = TRUE)
## expand
a <- as.simple_sparse_array(x)
a
r <- rollup(a, 1L, FUN = mean, na.rm = TRUE, EXPAND = "dense")
as.array(r)
##
r <- rollup(a, 1L, FUN = function(x, nz)
length(x) / (length(x) + nz),
EXPAND = "sparse"
)
as.array(r)
Simple Sparse Arrays
Description
Data structures and operators for sparse arrays based on a representation by index matrix and value vector.
Usage
simple_sparse_array(i, v, dim = NULL, dimnames = NULL)
as.simple_sparse_array(x)
is.simple_sparse_array(x)
simplify_simple_sparse_array(x, higher = TRUE)
reduce_simple_sparse_array(x, strict = FALSE, order = FALSE)
drop_simple_sparse_array(x)
Arguments
i |
Integer matrix of array indices. |
v |
Vector of values. |
dim |
Integer vector specifying the size of the dimensions. |
dimnames |
either |
x |
An R object; an object of class |
higher |
Option to use the dimensions of the values (see Note). |
strict |
Option to treat violations of sparse representation as error (see Note). |
order |
Option to reorder elements (see Note). |
Details
simple_sparse_array is a generator for
a class of “lightweight” sparse arrays,
represented by index matrices and value vectors.
Currently, only methods for indexing and coercion are implemented.
Note
The zero element is defined as vector(typeof(v), 1L),
for example, FALSE for logical values (see
vector). Clearly, sparse arrays should not contain
zero elements, however, for performance reasons the class
generator does not remove them.
If strict = FALSE (default) reduce_simple_sparse_array tries
to repair violations of sparse representation (zero, multiple
elements), otherwise it stops. If order = TRUE the elements are
further reordered (see array).
simplify_simple_sparse_array tries to reduce v. If
higher = TRUE (default) augments x by the common dimensions
of v (from the left), or the common length. Note that scalar
elements are never extended and unused dimensions never dropped.
drop_simple_sparse_array drops unused dimensions.
If prod(dim(x)) > slam_options("max_dense") empty and negative
indexing are disabled
for [ and [<-. Further, non-negative single (vector)
indexing is limited to 52 bits of representation.
See Also
simple_triplet_matrix for sparse matrices.
slam_options for options.
Examples
x <- array(c(1, 0, 0, 2, 0, 0, 0, 3), dim = c(2, 2, 2))
s <- as.simple_sparse_array(x)
identical(x, as.array(s))
simple_sparse_array(matrix(c(1, 3, 1, 3, 1, 3), nrow = 2), c(1, 2))
Simple Triplet Matrix
Description
Data structures and operators for sparse matrices based on simple triplet representation.
Usage
simple_triplet_matrix(i, j, v, nrow = max(i), ncol = max(j),
dimnames = NULL)
simple_triplet_zero_matrix(nrow, ncol = nrow, mode = "double")
simple_triplet_diag_matrix(v, nrow = length(v))
as.simple_triplet_matrix(x)
is.simple_triplet_matrix(x)
Arguments
i, j |
Integer vectors of row and column indices, respectively. |
v |
Vector of values. |
nrow, ncol |
Integer values specifying the number of rows and columns, respectively. Defaults are the maximum row and column indices, respectively. |
dimnames |
A |
mode |
Character string specifying the mode of the values. |
x |
An R object. |
Details
simple_triplet_matrix is a generator for
a class of “lightweight” sparse matrices, “simply”
represented by triplets (i, j, v) of row indices i, column
indices j, and values v, respectively.
simple_triplet_zero_matrix and
simple_triplet_diag_matrix are convenience functions for the
creation of empty and diagonal matrices.
Currently implemented operations include the addition, subtraction,
multiplication and division of compatible simple triplet matrices,
as well as the multiplication and division of a simple triplet matrix
and a vector. Comparisons of the elements of a simple triplet
matrices with a number are also provided. In addition,
methods for indexing, combining by rows
(rbind) and columns (cbind), transposing (t),
concatenating (c), and detecting/extracting duplicated and
unique rows are implemented.
See Also
simple_sparse_array for sparse arrays.
Examples
x <- matrix(c(1, 0, 0, 2), nrow = 2)
s <- as.simple_triplet_matrix(x)
identical(x, as.matrix(s))
simple_triplet_matrix(c(1, 4), c(1, 2), c(1, 2))
simple_triplet_zero_matrix(3)
simple_triplet_diag_matrix(1:3)
cbind(rbind(s, t(s)), rbind(s, s))
## Not run:
## map to default Matrix class
stopifnot(require("Matrix"))
sparseMatrix(i = s$i, j = s$j, x = s$v, dims = dim(s),
dimnames = dimnames(s))
## End(Not run)
Form Row and Column Sums and Means
Description
Form row and column sums and means for sparse arrays (currently
simple_triplet_matrix only).
Usage
row_sums(x, na.rm = FALSE, dims = 1, ...)
col_sums(x, na.rm = FALSE, dims = 1, ...)
row_means(x, na.rm = FALSE, dims = 1, ...)
col_means(x, na.rm = FALSE, dims = 1, ...)
## S3 method for class 'simple_triplet_matrix'
row_sums(x, na.rm = FALSE, dims = 1, ...)
## S3 method for class 'simple_triplet_matrix'
col_sums(x, na.rm = FALSE, dims = 1, ...)
## S3 method for class 'simple_triplet_matrix'
row_means(x, na.rm = FALSE, dims = 1, ...)
## S3 method for class 'simple_triplet_matrix'
col_means(x, na.rm = FALSE, dims = 1, ...)
Arguments
x |
a sparse array containing numeric, integer, or logical values. |
na.rm |
logical. Should missing values (including |
dims |
currently not used for sparse arrays. |
... |
currently not used for sparse arrays. |
Details
Provides fast summation over the rows or columns of sparse matrices in
simple_triplet-form.
Value
A numeric (double) array of suitable size, or a vector if the result
is one-dimensional. The dimnames (or names for a vector
result) are taken from the original array.
Note
Results are always of storage type double to avoid (integer)
overflows.
Author(s)
Christian Buchta
See Also
simple_triplet_matrix, colSums for dense
numeric arrays.
Examples
##
x <- matrix(c(1, 0, 0, 2, 1, NA), nrow = 3)
x
s <- as.simple_triplet_matrix(x)
row_sums(s)
row_sums(s, na.rm = TRUE)
col_sums(s)
col_sums(s, na.rm = TRUE)