public class DoubleFactory2D extends PersistentObject
Construction | Use idioms like DoubleFactory2D.dense.make(4,4) to construct dense matrices, DoubleFactory2D.sparse.make(4,4) to construct sparse matrices. |
Construction with initial values | Use other make methods to construct matrices with given initial values. |
Appending rows and columns | Use methods appendColumns ,
appendRows and repeat to append rows and columns. |
General block matrices | Use methods compose and decompose to work with general block matrices. |
Diagonal matrices | Use methods diagonal(vector) , diagonal(matrix) and identity
to work with diagonal matrices. |
Diagonal block matrices | Use method composeDiagonal to work with diagonal block matrices. |
Random | Use methods random and sample to construct random matrices. |
If the factory is used frequently it might be useful to streamline the notation. For example by aliasing:
DoubleFactory2D F = DoubleFactory2D.dense; F.make(4,4); F.descending(10,20); F.random(4,4); ... |
Modifier and Type | Field and Description |
---|---|
static DoubleFactory2D |
dense
A factory producing dense matrices.
|
static DoubleFactory2D |
rowCompressed
A factory producing sparse row compressed matrices.
|
static DoubleFactory2D |
sparse
A factory producing sparse hash matrices.
|
serialVersionUID
Modifier | Constructor and Description |
---|---|
protected |
DoubleFactory2D()
Makes this class non instantiable, but still let's others inherit from it.
|
Modifier and Type | Method and Description |
---|---|
DoubleMatrix2D |
appendColumns(DoubleMatrix2D A,
DoubleMatrix2D B)
C = A||B; Constructs a new matrix which is the column-wise concatenation of two other matrices.
|
DoubleMatrix2D |
appendRows(DoubleMatrix2D A,
DoubleMatrix2D B)
C = A||B; Constructs a new matrix which is the row-wise concatenation of two other matrices.
|
DoubleMatrix2D |
ascending(int rows,
int columns)
Constructs a matrix with cells having ascending values.
|
protected static void |
checkRectangularShape(double[][] array)
Checks whether the given array is rectangular, that is, whether all rows have the same number of columns.
|
protected static void |
checkRectangularShape(DoubleMatrix2D[][] array)
Checks whether the given array is rectangular, that is, whether all rows have the same number of columns.
|
DoubleMatrix2D |
compose(DoubleMatrix2D[][] parts)
Constructs a block matrix made from the given parts.
|
DoubleMatrix2D |
composeDiagonal(DoubleMatrix2D A,
DoubleMatrix2D B)
Constructs a diagonal block matrix from the given parts (the direct sum of two matrices).
|
DoubleMatrix2D |
composeDiagonal(DoubleMatrix2D A,
DoubleMatrix2D B,
DoubleMatrix2D C)
Constructs a diagonal block matrix from the given parts.
|
void |
decompose(DoubleMatrix2D[][] parts,
DoubleMatrix2D matrix)
Splits a block matrix into its constituent blocks; Copies blocks of a matrix into the given parts.
|
void |
demo1()
Demonstrates usage of this class.
|
void |
demo2()
Demonstrates usage of this class.
|
DoubleMatrix2D |
descending(int rows,
int columns)
Constructs a matrix with cells having descending values.
|
DoubleMatrix2D |
diagonal(DoubleMatrix1D vector)
Constructs a new diagonal matrix whose diagonal elements are the elements of vector.
|
DoubleMatrix1D |
diagonal(DoubleMatrix2D A)
Constructs a new vector consisting of the diagonal elements of A.
|
DoubleMatrix2D |
identity(int rowsAndColumns)
Constructs an identity matrix (having ones on the diagonal and zeros elsewhere).
|
DoubleMatrix2D |
make(double[][] values)
Constructs a matrix with the given cell values.
|
DoubleMatrix2D |
make(double[] values,
int rows)
Construct a matrix from a one-dimensional column-major packed array, ala Fortran.
|
DoubleMatrix2D |
make(int rows,
int columns)
Constructs a matrix with the given shape, each cell initialized with zero.
|
DoubleMatrix2D |
make(int rows,
int columns,
double initialValue)
Constructs a matrix with the given shape, each cell initialized with the given value.
|
protected DoubleMatrix1D |
make1D(int size)
Constructs a 1d matrix of the right dynamic type.
|
DoubleMatrix2D |
random(int rows,
int columns)
Constructs a matrix with uniformly distributed values in (0,1) (exclusive).
|
DoubleMatrix2D |
repeat(DoubleMatrix2D A,
int rowRepeat,
int columnRepeat)
C = A||A||..||A; Constructs a new matrix which is duplicated both along the row and column dimension.
|
DoubleMatrix2D |
sample(DoubleMatrix2D matrix,
double value,
double nonZeroFraction)
Modifies the given matrix to be a randomly sampled matrix.
|
DoubleMatrix2D |
sample(int rows,
int columns,
double value,
double nonZeroFraction)
Constructs a randomly sampled matrix with the given shape.
|
clone
public static final DoubleFactory2D dense
public static final DoubleFactory2D sparse
public static final DoubleFactory2D rowCompressed
protected DoubleFactory2D()
public DoubleMatrix2D appendColumns(DoubleMatrix2D A, DoubleMatrix2D B)
0 1 2 3 4 5 appendColumns 6 7 8 9 --> 0 1 2 6 7 3 4 5 8 9
public DoubleMatrix2D appendRows(DoubleMatrix2D A, DoubleMatrix2D B)
0 1 2 3 4 5 appendRows 6 7 8 9 --> 0 1 2 3 4 5 6 7 8 9
public DoubleMatrix2D ascending(int rows, int columns)
0 1 2 3 4 5
protected static void checkRectangularShape(double[][] array)
IllegalArgumentException
- if the array is not rectangular.protected static void checkRectangularShape(DoubleMatrix2D[][] array)
IllegalArgumentException
- if the array is not rectangular.public DoubleMatrix2D compose(DoubleMatrix2D[][] parts)
decompose(DoubleMatrix2D[][], DoubleMatrix2D)
.
All matrices of a given column within parts must have the same number of columns. All matrices of a given row within parts must have the same number of rows. Otherwise an IllegalArgumentException is thrown. Note that nulls within parts[row,col] are an exception to this rule: they are ignored. Cells are copied. Example:
Code | Result |
DoubleMatrix2D[][] parts1 = { { null, make(2,2,1), null }, { make(4,4,2), null, make(4,3,3) }, { null, make(2,2,4), null } }; System.out.println(compose(parts1)); |
8 x 9 matrix 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1 0 0 0 2 2 2 2 0 0 3 3 3 2 2 2 2 0 0 3 3 3 2 2 2 2 0 0 3 3 3 2 2 2 2 0 0 3 3 3 0 0 0 0 4 4 0 0 0 0 0 0 0 4 4 0 0 0 |
DoubleMatrix2D[][] parts3 = { { identity(3), null, }, { null, identity(3).viewColumnFlip() }, { identity(3).viewRowFlip(), null } }; System.out.println("\n"+make(parts3)); |
9 x 6 matrix 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 |
DoubleMatrix2D A = ascending(2,2); DoubleMatrix2D B = descending(2,2); DoubleMatrix2D _ = null; DoubleMatrix2D[][] parts4 = { { A, _, A, _ }, { _, A, _, B } }; System.out.println("\n"+make(parts4)); |
4 x 8 matrix 1 2 0 0 1 2 0 0 3 4 0 0 3 4 0 0 0 0 1 2 0 0 3 2 0 0 3 4 0 0 1 0 |
DoubleMatrix2D[][] parts2 = { { null, make(2,2,1), null }, { make(4,4,2), null, make(4,3,3) }, { null, make(2,3,4), null } }; System.out.println("\n"+Factory2D.make(parts2)); |
IllegalArgumentException A[0,1].cols != A[2,1].cols (2 != 3) |
IllegalArgumentException
- subject to the conditions outlined above.public DoubleMatrix2D composeDiagonal(DoubleMatrix2D A, DoubleMatrix2D B)
A 0 0 B(The direct sum has A.rows()+B.rows() rows and A.columns()+B.columns() columns). Cells are copied.
public DoubleMatrix2D composeDiagonal(DoubleMatrix2D A, DoubleMatrix2D B, DoubleMatrix2D C)
A 0 0 0 B 0 0 0 Cfrom the given parts. Cells are copied.
public void decompose(DoubleMatrix2D[][] parts, DoubleMatrix2D matrix)
compose(DoubleMatrix2D[][])
.
All matrices of a given column within parts must have the same number of columns. All matrices of a given row within parts must have the same number of rows. Otherwise an IllegalArgumentException is thrown. Note that nulls within parts[row,col] are an exception to this rule: they are ignored. Cells are copied. Example:
Code | matrix | --> parts |
DoubleMatrix2D matrix = ... ; DoubleMatrix2D _ = null; DoubleMatrix2D A,B,C,D; A = make(2,2); B = make (4,4); C = make(4,3); D = make (2,2); DoubleMatrix2D[][] parts = { { _, A, _ }, { B, _, C }, { _, D, _ } }; decompose(parts,matrix); System.out.println("\nA = "+A); System.out.println("\nB = "+B); System.out.println("\nC = "+C); System.out.println("\nD = "+D); |
8 x 9 matrix 9 9 9 9 1 1 9 9 9 9 9 9 9 1 1 9 9 9 2 2 2 2 9 9 3 3 3 2 2 2 2 9 9 3 3 3 2 2 2 2 9 9 3 3 3 2 2 2 2 9 9 3 3 3 9 9 9 9 4 4 9 9 9 9 9 9 9 4 4 9 9 9 |
A = 2 x 2 matrix B = 4 x 4 matrix C = 4 x 3 matrix D = 2 x 2 matrix |
IllegalArgumentException
- subject to the conditions outlined above.public void demo1()
public void demo2()
public DoubleMatrix2D descending(int rows, int columns)
5 4 3 2 1 0
public DoubleMatrix2D diagonal(DoubleMatrix1D vector)
5 4 3 --> 5 0 0 0 4 0 0 0 3
public DoubleMatrix1D diagonal(DoubleMatrix2D A)
5 0 0 9 0 4 0 9 0 0 3 9 --> 5 4 3
A
- the matrix, need not be square.public DoubleMatrix2D identity(int rowsAndColumns)
public DoubleMatrix2D make(double[][] values)
The values are copied. So subsequent changes in values are not reflected in the matrix, and vice-versa.
values
- The values to be filled into the new matrix.IllegalArgumentException
- if for any 1 <= row < values.length: values[row].length != values[row-1].length.public DoubleMatrix2D make(double[] values, int rows)
values
- One-dimensional array of doubles, packed by columns (ala Fortran).rows
- the number of rows.IllegalArgumentException
- values.length must be a multiple of rows.public DoubleMatrix2D make(int rows, int columns)
public DoubleMatrix2D make(int rows, int columns, double initialValue)
protected DoubleMatrix1D make1D(int size)
public DoubleMatrix2D random(int rows, int columns)
public DoubleMatrix2D repeat(DoubleMatrix2D A, int rowRepeat, int columnRepeat)
0 1 2 3 repeat(2,3) --> 0 1 0 1 0 1 2 3 2 3 2 3 0 1 0 1 0 1 2 3 2 3 2 3
public DoubleMatrix2D sample(int rows, int columns, double value, double nonZeroFraction)
IllegalArgumentException
- if nonZeroFraction < 0 || nonZeroFraction > 1.RandomSampler
public DoubleMatrix2D sample(DoubleMatrix2D matrix, double value, double nonZeroFraction)
IllegalArgumentException
- if nonZeroFraction < 0 || nonZeroFraction > 1.RandomSampler
Copyright © 2006–2019 SYSTAP, LLC DBA Blazegraph. All rights reserved.