Class AbstractCsrSemiringMatrix<T extends AbstractCsrSemiringMatrix<T,U,V,W>,U extends AbstractDenseSemiringMatrix<U,?,W>,V extends AbstractCooSemiringVector<V,?,?,U,W>,W extends Semiring<W>>
- Type Parameters:
T
- Type of this CSR field matrix.U
- Type of dense field matrix equivalent toT
.V
- Type of vector equivalent toV
.Y
- Type of field element of this matrix.
- All Implemented Interfaces:
Serializable
,MatrixMixin<T,
,U, V, W> SemiringTensorMixin<T,
,U, W> TensorOverSemiring<T,
U, W[], W>
- Direct Known Subclasses:
AbstractCsrRingMatrix
,CsrSemiringMatrix
A sparse matrix stored in compressed sparse row (CSR) format. The AbstractTensor.data
of this CSR matrix are
elements of a Semiring
.
The non-zero data
and non-zero indices of a CSR matrix are mutable but the AbstractTensor.shape
and total number of non-zero data
is fixed.
Sparse matrices allow for the efficient storage of and ops on matrices that contain many zero values.
A sparse CSR matrix is stored as:
- The full
shape
of the matrix. - The non-zero
AbstractTensor.data
of the matrix. All other data in the matrix are assumed to be zero. Zero values can also explicitly be stored inAbstractTensor.data
. - The
row pointers
of the non-zero values in the CSR matrix. Has sizenumRows + 1
- The
column indices
of the non-zero values in the sparse matrix.
rowPointers[i]
indicates the starting index within data
and colData
of all values in row
i
.
Note: many ops assume that the data of the CSR matrix are sorted lexicographically by the row and column indices. (i.e.) by row indices first then column indices. However, this is not explicitly verified. Any ops implemented in this class will preserve the lexicographical sorting.
If indices need to be sorted, call sortIndices()
.
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionfinal int[]
Column indices for non-zero values of this sparse CSR matrix.final int
Number of non-zero data in this CSR matrix.final int
The number of columns in this matrix.final int
The number of rows in this matrix.final int[]
Pointers indicating starting index of each row within thecolIndices
andAbstractTensor.data
arrays.protected final double
The sparsity of this matrix.protected W
The zero element for the semiring that this tensor's elements belong to.Fields inherited from class org.flag4j.arrays.backend.AbstractTensor
data, rank, shape
-
Constructor Summary
ModifierConstructorDescriptionprotected
AbstractCsrSemiringMatrix
(Shape shape, W[] entries, int[] rowPointers, int[] colIndices) Creates a sparse CSR matrix with the specifiedshape
, non-zero data, row pointers, and non-zero column indices. -
Method Summary
Modifier and TypeMethodDescriptionComputes the element-wise sum between two tensors of the same shape.Stacks matrices along rows.Augments a vector to this matrix.copy()
Creates a deep copy of this tensor.int
Gets the length of the data array which backs this matrix.double
density()
Gets the density of this matrix as a decimal percentage.Warning: throwsUnsupportedOperationException
as division is not defined for general semiring matrices.Computes the element-wise multiplication of two tensors of the same shape.flatten()
Flattens tensor to single dimension while preserving order of data.flatten
(int axis) Flattens a tensor along the specified axis.get
(int... indices) Gets the element of this tensor at the specified indices.get
(int row, int col) Gets the element of this matrix at this specifiedrow
andcol
.getSlice
(int rowStart, int rowEnd, int colStart, int colEnd) Gets a specified slice of this matrix.getTriL
(int diagOffset) Extracts the lower-triangular portion of this matrix with a specified diagonal offset.getTriU
(int diagOffset) Extracts the upper-triangular portion of this matrix with a specified diagonal offset.Gets the zero element for the semiring of this tensor.H()
Computes the Hermitian transpose of this matrix.boolean
Checks if a matrix is Hermitian.boolean
isI()
Checks if this matrix is the identity matrix.boolean
Checks if this matrix is orthogonal.boolean
Checks if a matrix is symmetric.boolean
isTriL()
Checks if this matrix is lower triangular.boolean
isTriU()
Checks if this matrix is upper triangular.abstract AbstractCooSemiringMatrix
<?, U, V, W> makeLikeCooMatrix
(Shape shape, W[] entries, int[] rowIndices, int[] colIndices) Constructs a sparse COO matrix of a similar type to this sparse CSR matrix.abstract U
makeLikeDenseTensor
(Shape shape, W[] entries) Constructs a dense matrix which is of a similar type to this sparse CSR matrix.abstract T
Constructs a CSR matrix with the specified shape, non-zero data, and non-zero indices.abstract T
makeLikeTensor
(Shape shape, W[] entries, int[] rowPointers, int[] colIndices) Constructs a sparse CSR tensor of the same type as this tensor with the specified non-zero data and indices.Computes the matrix multiplication between two matrices.multToSparse
(T b) Computes the matrix multiplication between two sparse CSR matrices and stores the result in a sparse matrix.multTranspose
(T b) Multiplies this matrix with the transpose of theb
tensor as if bythis.mult(b.T())
.int
numCols()
Gets the number of columns in this matrix.int
numRows()
Gets the number of rows in this matrix.removeCol
(int colIndex) Removes a specified column from this matrix.removeCols
(int... colIndices) Removes a specified set of columns from this matrix.removeRow
(int rowIndex) Removes a specified row from this matrix.removeRows
(int... rowIndices) Removes a specified set of rows from this matrix.Copies and reshapes this tensor.Sets the element of this tensor at the specified indices.Sets an index of this matrix to the specified value.Sets a specified column of this matrix to a vector.Sets a specified row of this matrix to a vector.setSliceCopy
(T values, int rowStart, int colStart) Creates a copy of this matrix and sets a slice of the copy to the specified values.void
setZeroElement
(W zeroElement) Sets the zero element for the semiring of this tensor.void
Sorts the indices of this tensor in lexicographical order while maintaining the associated value for each index.double
sparsity()
Gets the sparsity of this matrix as a decimal percentage.Stacks matrices along columns.Warning: throwsUnsupportedOperationException
as subtraction is not defined for general semiring matrices.swapCols
(int colIndex1, int colIndex2) Swaps specified columns in the matrix.swapRows
(int rowIndex1, int rowIndex2) Swaps specified rows in the matrix.T()
Computes the transpose of a tensor by exchanging the first and last axes of this tensor.T
(int... axes) Computes the transpose of this tensor.T
(int axis1, int axis2) Computes the transpose of a tensor by exchangingaxis1
andaxis2
.tensorTr
(int axis1, int axis2) Computes the generalized trace of this tensor along the specified axes.abstract AbstractCooSemiringMatrix
toCoo()
Converts this sparse CSR matrix to an equivalent sparse COO matrix.toDense()
Converts this sparse CSR matrix to an equivalent dense matrix.abstract AbstractCooSemiringTensor
<?, ?, W> toTensor()
Converts this CSR matrix to an equivalent sparse COO tensor.Converts this CSR matrix to an equivalent COO tensor with the specified shape.toVector()
Converts this sparse CSR matrix to an equivalent vector.tr()
Computes the trace of this matrix.Methods inherited from class org.flag4j.arrays.backend.AbstractTensor
getData, getRank, getShape, makeLikeTensor, reshape, sameShape, totalEntries
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.flag4j.arrays.backend.MatrixMixin
accept, fib, getCol, getCol, getDiag, getDiag, getRow, getRow, getShape, getTriL, getTriU, isDiag, isSquare, isTri, isVector, mult, stack, trace, vectorType
Methods inherited from interface org.flag4j.arrays.backend.semiring_arrays.SemiringTensorMixin
add, addEq, argmax, argmin, isOnes, isZeros, makeEmptyDataArray, max, min, mult, multEq, prod, sum
Methods inherited from interface org.flag4j.arrays.backend.semiring_arrays.TensorOverSemiring
getData, getRank, getShape, makeLikeTensor, tensorDot, tensorDot, tensorDot, tensorDot, tensorTr
-
Field Details
-
zeroElement
-
rowPointers
public final int[] rowPointersPointers indicating starting index of each row within the
colIndices
andAbstractTensor.data
arrays. Has lengthnumRows + 1
.The range [
data[rowPointers[i]], data[rowPointers[i+1]]
) contains allnon-zero data
within rowi
.Similarly, [
colData[rowPointers[i]], colData[rowPointers[i+1]]
) contains allcolumn indices
for the data in rowi
. -
colIndices
public final int[] colIndicesColumn indices for non-zero values of this sparse CSR matrix. -
nnz
public final int nnzNumber of non-zero data in this CSR matrix. -
numRows
public final int numRowsThe number of rows in this matrix. -
numCols
public final int numColsThe number of columns in this matrix. -
sparsity
protected final double sparsityThe sparsity of this matrix.
-
-
Constructor Details
-
AbstractCsrSemiringMatrix
Creates a sparse CSR matrix with the specifiedshape
, non-zero data, row pointers, and non-zero column indices.- Parameters:
shape
- Shape of this tensor.entries
- The non-zero data of this CSR matrix.rowPointers
- The row pointers for the non-zero values in the sparse CSR matrix.rowPointers[i]
indicates the starting index withindata
andcolData
of all values in rowi
.colIndices
- Column indices for each non-zero value in this sparse CSR matrix. Must satisfydata.length == colData.length
.
-
-
Method Details
-
makeLikeTensor
Constructs a sparse CSR tensor of the same type as this tensor with the specified non-zero data and indices.- Parameters:
shape
- Shape of the matrix.entries
- Non-zero data of the CSR matrix.rowPointers
- Row pointers for the non-zero values in the CSR matrix.colIndices
- Non-zero column indices of the CSR matrix.- Returns:
- A sparse CSR tensor of the same type as this tensor with the specified non-zero data and indices.
-
makeLikeTensor
public abstract T makeLikeTensor(Shape shape, List<W> entries, List<Integer> rowPointers, List<Integer> colIndices) Constructs a CSR matrix with the specified shape, non-zero data, and non-zero indices.- Parameters:
shape
- Shape of the matrix.entries
- Non-zero values of the CSR matrix.rowPointers
- Row pointers for the non-zero values in the CSR matrix.colIndices
- Non-zero column indices of the CSR matrix.- Returns:
- A CSR matrix with the specified shape, non-zero data, and non-zero indices.
-
makeLikeDenseTensor
Constructs a dense matrix which is of a similar type to this sparse CSR matrix.- Parameters:
shape
- Shape of the dense matrix.entries
- Entries of the dense matrix.- Returns:
- A dense matrix which is of a similar type to this sparse CSR matrix with the specified
shape
anddata
.
-
makeLikeCooMatrix
public abstract AbstractCooSemiringMatrix<?,U, makeLikeCooMatrixV, W> (Shape shape, W[] entries, int[] rowIndices, int[] colIndices) Constructs a sparse COO matrix of a similar type to this sparse CSR matrix.
Note: this method constructs a new COO matrix with the specified data and indices. It does not convert this matrix to a CSR matrix. To convert this matrix to a sparse COO matrix use
toCoo()
.- Parameters:
shape
- Shape of the COO matrix.entries
- Non-zero data of the COO matrix.rowIndices
- Non-zero row indices of the sparse COO matrix.colIndices
- Non-zero column indices of the Sparse COO matrix.- Returns:
- A sparse COO matrix of a similar type to this sparse CSR matrix.
-
sparsity
public double sparsity()Gets the sparsity of this matrix as a decimal percentage. That is, the percentage of data in this matrix that are zero.- Returns:
- The sparsity of this matrix as a decimal percentage.
- See Also:
-
density
public double density()Gets the density of this matrix as a decimal percentage. That is, the percentage of data in this matrix that are non-zero.- Returns:
- The density of this matrix as a decimal percentage.
- See Also:
-
dataLength
public int dataLength()Gets the length of the data array which backs this matrix.- Specified by:
dataLength
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Returns:
- The length of the data array which backs this matrix.
-
getZeroElement
Gets the zero element for the semiring of this tensor.- Returns:
- The zero element for the semiring of this tensor. If it could not be determined during construction of this object
and has not been set explicitly by
setZeroElement(Semiring)
thennull
will be returned. - See Also:
-
setZeroElement
Sets the zero element for the semiring of this tensor.- Parameters:
zeroElement
- The zero element of this tensor.- Throws:
IllegalArgumentException
- IfzeroElement
is not an additive identity for the semiring.- See Also:
-
get
Gets the element of this tensor at the specified indices.- Specified by:
get
in classAbstractTensor<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, W extends Semiring<W>[], W extends Semiring<W>> - Parameters:
indices
- Indices of the element to get.- Returns:
- The element of this tensor at the specified indices.
- Throws:
ArrayIndexOutOfBoundsException
- If any indices are not within this tensor.
-
set
Sets the element of this tensor at the specified indices.- Specified by:
set
in classAbstractTensor<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, W extends Semiring<W>[], W extends Semiring<W>> - Parameters:
value
- New value to set the specified index of this tensor to.indices
- Indices of the element to set.- Returns:
- If this tensor is dense, a reference to this tensor is returned. If this tensor is sparse, a copy of this tensor with the updated value is returned.
- Throws:
IndexOutOfBoundsException
- Ifindices
is not within the bounds of this tensor.
-
flatten
-
flatten
Flattens a tensor along the specified axis. Unlikeflatten()
- Specified by:
flatten
in classAbstractTensor<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, W extends Semiring<W>[], W extends Semiring<W>> - Parameters:
axis
- Axis along which to flatten tensor.- Throws:
ArrayIndexOutOfBoundsException
- If the axis is not positive or larger thanthis.{@link #getRank()}-1
.- See Also:
-
reshape
Copies and reshapes this tensor.- Specified by:
reshape
in classAbstractTensor<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, W extends Semiring<W>[], W extends Semiring<W>> - Parameters:
newShape
- New shape for the tensor.- Returns:
- A copy of this tensor with the new shape.
- Throws:
TensorShapeException
- IfnewShape
is not broadcastable tothis.shape
.
-
T
Computes the transpose of a tensor by exchanging the first and last axes of this tensor.- Specified by:
T
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Overrides:
T
in classAbstractTensor<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, W extends Semiring<W>[], W extends Semiring<W>> - Returns:
- The transpose of this tensor.
- See Also:
-
add
Computes the element-wise sum between two tensors of the same shape.- Specified by:
add
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Specified by:
add
in interfaceTensorOverSemiring<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Parameters:
b
- Second tensor in the element-wise sum.- Returns:
- The sum of this tensor with
b
. - Throws:
TensorShapeException
- If this tensor andb
do not have the same shape.
-
elemMult
Computes the element-wise multiplication of two tensors of the same shape.- Specified by:
elemMult
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Specified by:
elemMult
in interfaceTensorOverSemiring<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Parameters:
b
- Second tensor in the element-wise product.- Returns:
- The element-wise product between this tensor and
b
. - Throws:
IllegalArgumentException
- If this tensor andb
do not have the same shape.
-
tensorTr
Computes the generalized trace of this tensor along the specified axes.
The generalized tensor trace is the sum along the diagonal values of the 2D sub-arrays of this tensor specified by
axis1
andaxis2
. The shape of the resulting tensor is equal to this tensor with theaxis1
andaxis2
removed.- Specified by:
tensorTr
in interfaceTensorOverSemiring<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Parameters:
axis1
- First axis for 2D sub-array.axis2
- Second axis for 2D sub-array.- Returns:
- The generalized trace of this tensor along
axis1
andaxis2
. - Throws:
IndexOutOfBoundsException
- If the two axes are not both larger than zero and less than this tensors rank.IllegalArgumentException
- Ifaxis1 == axis2
orthis.shape.get(axis1) != this.shape.get(axis1)
(i.e. the axes are equal or the tensor does not have the same length along the two axes.)
-
T
Computes the transpose of a tensor by exchangingaxis1
andaxis2
.- Specified by:
T
in classAbstractTensor<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, W extends Semiring<W>[], W extends Semiring<W>> - Parameters:
axis1
- First axis to exchange.axis2
- Second axis to exchange.- Returns:
- The transpose of this tensor according to the specified axes.
- Throws:
IndexOutOfBoundsException
- If eitheraxis1
oraxis2
are out of bounds for the rank of this tensor.- See Also:
-
T
Computes the transpose of this tensor. That is, permutes the axes of this tensor so that it matches the permutation specified byaxes
.- Specified by:
T
in classAbstractTensor<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, W extends Semiring<W>[], W extends Semiring<W>> - Parameters:
axes
- Permutation of tensor axis. If the tensor has rankN
, then this must be an array of lengthN
which is a permutation of{0, 1, 2, ..., N-1}
.- Returns:
- The transpose of this tensor with its axes permuted by the
axes
array. - Throws:
IndexOutOfBoundsException
- If any element ofaxes
is out of bounds for the rank of this tensor.IllegalArgumentException
- Ifaxes
is not a permutation of{1, 2, 3, ... N-1}
.- See Also:
-
numRows
public int numRows()Gets the number of rows in this matrix.- Specified by:
numRows
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Returns:
- The number of rows in this matrix.
-
numCols
public int numCols()Gets the number of columns in this matrix.- Specified by:
numCols
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Returns:
- The number of columns in this matrix.
-
get
Gets the element of this matrix at this specifiedrow
andcol
.- Specified by:
get
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Parameters:
row
- Row index of the item to get from this matrix.col
- Column index of the item to get from this matrix.- Returns:
- The element of this matrix at the specified index.
-
tr
Computes the trace of this matrix. That is, the sum of elements along the principle diagonal of this matrix.
Same as
MatrixMixin.trace()
.- Specified by:
tr
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Returns:
- The trace of this matrix.
- Throws:
IllegalArgumentException
- If this matrix is not square.
-
isTriU
public boolean isTriU()Checks if this matrix is upper triangular.- Specified by:
isTriU
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Returns:
true
is this matrix is upper triangular;false
otherwise.- See Also:
-
isTriL
public boolean isTriL()Checks if this matrix is lower triangular.- Specified by:
isTriL
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Returns:
true
is this matrix is lower triangular;false
otherwise.- See Also:
-
isI
public boolean isI()Checks if this matrix is the identity matrix. That is, checks if this matrix is square and contains only ones along the principle diagonal and zeros everywhere else.- Specified by:
isI
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Returns:
true
if this matrix is the identity matrix;false
otherwise.
-
mult
Computes the matrix multiplication between two matrices.- Specified by:
mult
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Parameters:
b
- Second matrix in the matrix multiplication.- Returns:
- The result of matrix multiplying this matrix with matrix
b
. - Throws:
LinearAlgebraException
- If the number of columns in this matrix do not equal the number of rows in matrixb
.- See Also:
-
multToSparse
Computes the matrix multiplication between two sparse CSR matrices and stores the result in a sparse matrix.
Warning: this method should be used with caution as sparse-sparse matrix multiplication may result in a dense matrix. In such a case, this method will likely be significantly slower than
mult(AbstractCsrSemiringMatrix)
.- Parameters:
b
-- Returns:
-
multTranspose
Multiplies this matrix with the transpose of theb
tensor as if bythis.mult(b.T())
. For large matrices, this method may be significantly faster than directly computing the transpose followed by the multiplication asthis.mult(b.T())
.- Specified by:
multTranspose
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Parameters:
b
- The second matrix in the multiplication and the matrix to transpose.- Returns:
- The result of multiplying this matrix with the transpose of
b
.
-
stack
Stacks matrices along columns.- Specified by:
stack
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Parameters:
b
- Matrix to stack to this matrix.- Returns:
- The result of stacking this matrix on top of the matrix
b
. - Throws:
IllegalArgumentException
- If this matrix and matrixb
have a different number of columns.- See Also:
-
augment
Stacks matrices along rows.- Specified by:
augment
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Parameters:
b
- Matrix to stack to this matrix.- Returns:
- The result of stacking
b
to the right of this matrix. - Throws:
IllegalArgumentException
- If this matrix and matrixb
have a different number of rows.- See Also:
-
augment
Augments a vector to this matrix.- Specified by:
augment
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Parameters:
b
- The vector to augment to this matrix.- Returns:
- The result of augmenting
b
to this matrix.
-
setRow
Sets a specified row of this matrix to a vector.- Specified by:
setRow
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Parameters:
row
- Vector to replace specified row in this matrix.rowIdx
- Index of the row to set.- Returns:
- If this matrix is dense, the row set operation is done in place and a reference to this matrix is returned. If this matrix is sparse a copy will be created with the new row and returned.
-
setCol
Sets a specified column of this matrix to a vector.- Specified by:
setCol
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Parameters:
col
- Vector to replace specified column in this matrix.colIdx
- Index of the column to set.- Returns:
- If this matrix is dense, the column set operation is done in place and a reference to this matrix is returned. If this matrix is sparse a copy will be created with the new column and returned.
-
swapRows
Swaps specified rows in the matrix. This is done in place.- Specified by:
swapRows
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Parameters:
rowIndex1
- Index of the first row to swap.rowIndex2
- Index of the second row to swap.- Returns:
- A reference to this matrix.
- Throws:
ArrayIndexOutOfBoundsException
- If either index is outside the matrix bounds.
-
swapCols
Swaps specified columns in the matrix. This is done in place.- Specified by:
swapCols
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Parameters:
colIndex1
- Index of the first column to swap.colIndex2
- Index of the second column to swap.- Returns:
- A reference to this matrix.
- Throws:
ArrayIndexOutOfBoundsException
- If either index is outside the matrix bounds.
-
isSymmetric
public boolean isSymmetric()Checks if a matrix is symmetric. That is, if the matrix is square and equal to its transpose.- Specified by:
isSymmetric
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Returns:
true
if this matrix is symmetric;false
otherwise.
-
isHermitian
public boolean isHermitian()Checks if a matrix is Hermitian. That is, if the matrix is square and equal to its conjugate transpose.- Specified by:
isHermitian
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Returns:
true
if this matrix is Hermitian;false
otherwise.
-
isOrthogonal
public boolean isOrthogonal()Checks if this matrix is orthogonal. That is, if the inverse of this matrix is equal to its transpose.- Specified by:
isOrthogonal
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Returns:
true
if this matrix it is orthogonal;false
otherwise.
-
removeRow
Removes a specified row from this matrix.- Specified by:
removeRow
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Parameters:
rowIndex
- Index of the row to remove from this matrix.- Returns:
- A copy of this matrix with the specified row removed.
-
removeRows
Removes a specified set of rows from this matrix.- Specified by:
removeRows
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Parameters:
rowIndices
- The indices of the rows to remove from this matrix. Assumed to contain unique values.- Returns:
- A copy of this matrix with the specified column removed.
-
removeCol
Removes a specified column from this matrix.- Specified by:
removeCol
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Parameters:
colIndex
- Index of the column to remove from this matrix.- Returns:
- A copy of this matrix with the specified column removed.
-
removeCols
Removes a specified set of columns from this matrix.- Specified by:
removeCols
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Parameters:
colIndices
- Indices of the columns to remove from this matrix. Assumed to contain unique values.- Returns:
- A copy of this matrix with the specified column removed.
-
setSliceCopy
Creates a copy of this matrix and sets a slice of the copy to the specified values. The rowStart and colStart parameters specify the upper left index location of the slice to set.- Specified by:
setSliceCopy
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Parameters:
values
- New values for the specified slice.rowStart
- Starting row index for the slice (inclusive).colStart
- Starting column index for the slice (inclusive).- Returns:
- A copy of this matrix with the given slice set to the specified values.
- Throws:
IndexOutOfBoundsException
- If rowStart or colStart are not within the matrix.IllegalArgumentException
- If the values slice, with upper left corner at the specified location, does not fit completely within this matrix.
-
getSlice
Gets a specified slice of this matrix.- Specified by:
getSlice
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Parameters:
rowStart
- Starting row index of slice (inclusive).rowEnd
- Ending row index of slice (exclusive).colStart
- Starting column index of slice (inclusive).colEnd
- Ending row index of slice (exclusive).- Returns:
- The specified slice of this matrix. This is a completely new matrix and NOT a view into the matrix.
- Throws:
ArrayIndexOutOfBoundsException
- If any of the indices are out of bounds of this matrix.IllegalArgumentException
- IfrowEnd
is not greater thanrowStart
or ifcolEnd
is not greater thancolStart
.
-
set
Sets an index of this matrix to the specified value.- Specified by:
set
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Parameters:
value
- Value to set.row
- Row index to set.col
- Column index to set.- Returns:
- A reference to this matrix.
-
getTriU
Extracts the upper-triangular portion of this matrix with a specified diagonal offset. All other data of the resulting matrix will be zero.- Specified by:
getTriU
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Parameters:
diagOffset
- Diagonal offset for upper-triangular portion to extract:- If zero, then all data at and above the principle diagonal of this matrix are extracted.
- If positive, then all data at and above the equivalent super-diagonal are extracted.
- If negative, then all data at and above the equivalent sub-diagonal are extracted.
- Returns:
- The upper-triangular portion of this matrix with a specified diagonal offset. All other data of the returned matrix will be zero.
- Throws:
IllegalArgumentException
- IfdiagOffset
is not in the range (-numRows, numCols).
-
getTriL
Extracts the lower-triangular portion of this matrix with a specified diagonal offset. All other data of the resulting matrix will be zero.- Specified by:
getTriL
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Parameters:
diagOffset
- Diagonal offset for lower-triangular portion to extract:- If zero, then all data at and above the principle diagonal of this matrix are extracted.
- If positive, then all data at and above the equivalent super-diagonal are extracted.
- If negative, then all data at and above the equivalent sub-diagonal are extracted.
- Returns:
- The lower-triangular portion of this matrix with a specified diagonal offset. All other data of the returned matrix will be zero.
- Throws:
IllegalArgumentException
- IfdiagOffset
is not in the range (-numRows, numCols).
-
copy
Creates a deep copy of this tensor.- Specified by:
copy
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Specified by:
copy
in classAbstractTensor<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, W extends Semiring<W>[], W extends Semiring<W>> - Returns:
- A deep copy of this tensor.
-
H
Computes the Hermitian transpose of this matrix.- Specified by:
H
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Returns:
- The Hermitian transpose of this matrix.
-
sortIndices
public void sortIndices()Sorts the indices of this tensor in lexicographical order while maintaining the associated value for each index. -
toDense
Converts this sparse CSR matrix to an equivalent dense matrix.
The zero data of this CSR matrix will be attempted to be filled with a zero value if it could be determined during construction of this sparse CSR matrix. If the zero value could not be determined the zero data will be filled with
null
(this only happens whennnz==0
). To avoid this, the zero element of the semiring for this matrix can be set explicitly usingsetZeroElement(Semiring)
.- Returns:
- A dense matrix which is equivalent to this sparse CSR matrix.
-
toCoo
Converts this sparse CSR matrix to an equivalent sparse COO matrix.- Returns:
- A sparse COO matrix equivalent to this sparse CSR matrix.
-
toTensor
Converts this CSR matrix to an equivalent sparse COO tensor.- Returns:
- An sparse COO tensor equivalent to this CSR matrix.
-
toTensor
Converts this CSR matrix to an equivalent COO tensor with the specified shape.- Parameters:
newShape
- New shape for the COO tensor. Can be any rank but must be broadcastable tothis.shape
.- Returns:
- A COO tensor equivalent to this CSR matrix which has been reshaped to
newShape
-
toVector
Converts this sparse CSR matrix to an equivalent vector. If this matrix is not a row or column vector it will be flattened before conversion.- Specified by:
toVector
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Returns:
- A vector equivalent to this CSR matrix.
-
sub
Warning: throws
UnsupportedOperationException
as subtraction is not defined for general semiring matrices.Computes the element-wise difference of two matrices.
- Specified by:
sub
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Parameters:
b
- Second matrix in the element-wise difference.- Returns:
- The element-wise difference of this matrix and
b
.
-
div
Warning: throws
UnsupportedOperationException
as division is not defined for general semiring matrices.Computes the element-wise quotient of two matrices.
- Specified by:
div
in interfaceMatrixMixin<T extends AbstractCsrSemiringMatrix<T,
U, V, W>, U extends AbstractDenseSemiringMatrix<U, ?, W>, V extends AbstractCooSemiringVector<V, ?, ?, U, W>, W extends Semiring<W>> - Parameters:
b
- Second matrix in the element-wise quotient.- Returns:
- The element-wise quotient of this matrix and
b
.
-