denseToSpRE

Purpose

Converts a dense matrix to a sparse matrix, using a relative epsilon.

Format

x_sparse = denseToSpRE(x, reps)
Parameters:
  • x (MxN matrix) – Dense data matrix.
  • reps (scalar) – relative epsilon. Elements of x will be treated as zero if their absolute values are less than or equal to reps multiplied by the mean of the absolute values of the non-zero values in x.
Returns:

x_sparse (MxN sparse matrix) – Sparse matrix converted from x.

Examples

// Declare 'x_sparse' as a sparse matrix
sparse matrix x_sparse;

x = { -9   0   0    1,
       0   4   0    0,
       5   0   0    7,
       0   0  -2  2.2 };

// Create a sparse matrix 'x_sparse' from 'x'
x_sparse = denseToSpRE(x, 0.5);

// Convert `x_sparse` to new dense matrix
d = spToDense(x_sparse);

After the code above, d is equal to:

-9.00   0.00   0.00   0.00
 0.00   4.00   0.00   0.00
 5.00   0.00   0.00   7.00
 0.00   0.00   0.00   2.20

You can calculate the mean of the non-zero elements of x like this:

/*
** Create a matrix of 1's and 0's with a 1 where the
** corresponding element in 'x' is not equal to 0
*/
mask = x ./= 0;

/*
** Calculate the sum of 'mask', this is the number of
** non-zeros in 'x'
*/
nnz = sumc(sumc(mask));

/*
** Divide the sum of the absolute value of 'x' by the number
** of non-zeros
*/
nzmean = sumc(sumc(abs(x)))/nnz;
nnz =       7
nzmean = 4.31

This implies that the call to denseToSpRE() towards the start of this example removed all non-zeros less than \(0.5 * nzmean \approx 2.16\).

Remarks

A dense matrix is just a normal format matrix.

Since sparse matrices are strongly typed in GAUSS, x_sparse must be defined as a sparse matrix before the call to denseToSpRE().

See also

Functions denseToSp(), spCreate(), spToDense()