Class DoubleFactory2D
- All Implemented Interfaces:
Serializable
,Cloneable
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); ... |
- Version:
- 1.0, 09/24/99
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final DoubleFactory2D
A factory producing dense matrices.static final DoubleFactory2D
A factory producing sparse row compressed matrices.static final DoubleFactory2D
A factory producing sparse hash matrices.Fields inherited from class cern.colt.PersistentObject
serialVersionUID
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
Makes this class non instantiable, but still let's others inherit from it. -
Method Summary
Modifier and TypeMethodDescriptionC = A||B; Constructs a new matrix which is the column-wise concatenation of two other matrices.C = A||B; Constructs a new matrix which is the row-wise concatenation of two other matrices.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.compose
(DoubleMatrix2D[][] parts) Constructs a block matrix made from the given parts.Constructs a diagonal block matrix from the given parts (the direct sum of two matrices).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.descending
(int rows, int columns) Constructs a matrix with cells having descending values.diagonal
(DoubleMatrix1D vector) Constructs a new diagonal matrix whose diagonal elements are the elements of vector.Constructs a new vector consisting of the diagonal elements of A.identity
(int rowsAndColumns) Constructs an identity matrix (having ones on the diagonal and zeros elsewhere).make
(double[][] values) Constructs a matrix with the given cell values.make
(double[] values, int rows) Construct a matrix from a one-dimensional column-major packed array, ala Fortran.make
(int rows, int columns) Constructs a matrix with the given shape, each cell initialized with zero.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.random
(int rows, int columns) Constructs a matrix with uniformly distributed values in (0,1) (exclusive).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.sample
(int rows, int columns, double value, double nonZeroFraction) Constructs a randomly sampled matrix with the given shape.sample
(DoubleMatrix2D matrix, double value, double nonZeroFraction) Modifies the given matrix to be a randomly sampled matrix.Methods inherited from class cern.colt.PersistentObject
clone
-
Field Details
-
dense
A factory producing dense matrices. -
sparse
A factory producing sparse hash matrices. -
rowCompressed
A factory producing sparse row compressed matrices.
-
-
Constructor Details
-
DoubleFactory2D
protected DoubleFactory2D()Makes this class non instantiable, but still let's others inherit from it.
-
-
Method Details
-
appendColumns
C = A||B; Constructs a new matrix which is the column-wise concatenation of two other matrices.0 1 2 3 4 5 appendColumns 6 7 8 9 --> 0 1 2 6 7 3 4 5 8 9
-
appendRows
C = A||B; Constructs a new matrix which is the row-wise concatenation of two other matrices.0 1 2 3 4 5 appendRows 6 7 8 9 --> 0 1 2 3 4 5 6 7 8 9
-
ascending
Constructs a matrix with cells having ascending values. For debugging purposes. Example:0 1 2 3 4 5
-
checkRectangularShape
protected static void checkRectangularShape(double[][] array) Checks whether the given array is rectangular, that is, whether all rows have the same number of columns.- Throws:
IllegalArgumentException
- if the array is not rectangular.
-
checkRectangularShape
Checks whether the given array is rectangular, that is, whether all rows have the same number of columns.- Throws:
IllegalArgumentException
- if the array is not rectangular.
-
compose
Constructs a block matrix made from the given parts. The inverse to methoddecompose(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 0DoubleMatrix2D[][] 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 0DoubleMatrix2D A = ascending(2,2); DoubleMatrix2D B = descending(2,2); DoubleMatrix2D _null = null; DoubleMatrix2D[][] parts4 = { { A, _null, A, _null }, { _null, A, _null, 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 0DoubleMatrix2D[][] 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)- Throws:
IllegalArgumentException
- subject to the conditions outlined above.
-
composeDiagonal
Constructs a diagonal block matrix from the given parts (the direct sum of two matrices). That is the concatenationA 0 0 B
(The direct sum has A.rows()+B.rows() rows and A.columns()+B.columns() columns). Cells are copied.- Returns:
- a new matrix which is the direct sum.
-
composeDiagonal
Constructs a diagonal block matrix from the given parts. The concatenation has the formA 0 0 0 B 0 0 0 C
from the given parts. Cells are copied. -
decompose
Splits a block matrix into its constituent blocks; Copies blocks of a matrix into the given parts. The inverse to methodcompose(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 = null; DoubleMatrix2D A,B,C,D; A = make(2,2); B = make (4,4); C = make(4,3); D = make (2,2); DoubleMatrix2D[][] parts = { { _null, A, _null }, { B, _null, C }, { _null, D, _null } }; 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 9A = 2 x 2 matrix
1 1
1 1B = 4 x 4 matrix
2 2 2 2
2 2 2 2
2 2 2 2
2 2 2 2C = 4 x 3 matrix
3 3 3
3 3 3
3 3 3
3 3 3D = 2 x 2 matrix
4 4
4 4- Throws:
IllegalArgumentException
- subject to the conditions outlined above.
-
demo1
public void demo1()Demonstrates usage of this class. -
demo2
public void demo2()Demonstrates usage of this class. -
descending
Constructs a matrix with cells having descending values. For debugging purposes. Example:5 4 3 2 1 0
-
diagonal
Constructs a new diagonal matrix whose diagonal elements are the elements of vector. Cells values are copied. The new matrix is not a view. Example:5 4 3 --> 5 0 0 0 4 0 0 0 3
- Returns:
- a new matrix.
-
diagonal
Constructs a new vector consisting of the diagonal elements of A. Cells values are copied. The new vector is not a view. Example:5 0 0 9 0 4 0 9 0 0 3 9 --> 5 4 3
- Parameters:
A
- the matrix, need not be square.- Returns:
- a new vector.
-
identity
Constructs an identity matrix (having ones on the diagonal and zeros elsewhere). -
make
Constructs a matrix with the given cell values. values is required to have the form values[row][column] and have exactly the same number of columns in every row.The values are copied. So subsequent changes in values are not reflected in the matrix, and vice-versa.
- Parameters:
values
- The values to be filled into the new matrix.- Throws:
IllegalArgumentException
- if for any 1 <= row < values.length: values[row].length != values[row-1].length.
-
make
Construct a matrix from a one-dimensional column-major packed array, ala Fortran. Has the form matrix.get(row,column) == values[row + column*rows]. The values are copied.- Parameters:
values
- One-dimensional array of doubles, packed by columns (ala Fortran).rows
- the number of rows.- Throws:
IllegalArgumentException
- values.length must be a multiple of rows.
-
make
Constructs a matrix with the given shape, each cell initialized with zero. -
make
Constructs a matrix with the given shape, each cell initialized with the given value. -
make1D
Constructs a 1d matrix of the right dynamic type. -
random
Constructs a matrix with uniformly distributed values in (0,1) (exclusive). -
repeat
C = A||A||..||A; Constructs a new matrix which is duplicated both along the row and column dimension. Example: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
-
sample
Constructs a randomly sampled matrix with the given shape. Randomly picks exactly Math.round(rows*columns*nonZeroFraction) cells and initializes them to value, all the rest will be initialized to zero. Note that this is not the same as setting each cell with probability nonZeroFraction to value. Note: The random seed is a constant.- Throws:
IllegalArgumentException
- if nonZeroFraction invalid input: '<' 0 || nonZeroFraction > 1.- See Also:
-
sample
Modifies the given matrix to be a randomly sampled matrix. Randomly picks exactly Math.round(rows*columns*nonZeroFraction) cells and initializes them to value, all the rest will be initialized to zero. Note that this is not the same as setting each cell with probability nonZeroFraction to value. Note: The random seed is a constant.- Throws:
IllegalArgumentException
- if nonZeroFraction invalid input: '<' 0 || nonZeroFraction > 1.- See Also:
-