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 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.
|
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.
|
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
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
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)
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
Jas4pp 1.5 © Java Analysis Studio for Particle Physics