Class CsrMatrix
- All Implemented Interfaces:
Serializable
,TensorOverField<CsrMatrix,
,CsrMatrix, double[], Double> MatrixMixin<CsrMatrix,
,Matrix, CooVector, Double> TensorOverRing<CsrMatrix,
,CsrMatrix, double[], Double> TensorOverSemiring<CsrMatrix,
CsrMatrix, double[], Double>
Instances of this class represent a real sparse matrix using the compressed sparse row (CSR) format. This class is optimized for efficient storage and operations on matrices with a high proportion of zero elements. The non-zero values of the matrix are stored in a compact form, reducing memory usage and improving performance for many matrix operations.
CSR Representation:
A CSR matrix is represented internally using three main arrays:- Data: Non-zero values are stored in a one-dimensional array
AbstractTensor.data
of lengthnnz
. Any element not specified indata
is implicitly zero. It is also possible to explicitly store zero values in this array, although this is generally not desirable. To remove explicitly defined zeros, usedropZeros()
- Row Pointers: A 1D array
rowPointers
of lengthnumRows + 1
whererowPointers[i]
indicates the starting index in thedata
andcolIndices
arrays for rowi
. The last entry ofrowPointers
equals the length ofdata
. That is, all non-zero values indata
which are in rowi
are betweendata[rowIndices[i]
(inclusive) anddata[rowIndices[i + 1]
(exclusive). - Column Indices: A 1D array
colIndices
of lengthnnz
storing the column indices corresponding to each non-zero value indata
.
The total number of non-zero elements (nnz
) and the shape are fixed for a given instance, but the values
in AbstractTensor.data
and their corresponding rowPointers
and colIndices
may be updated. Many operations
assume that the indices are sorted lexicographically by row, and then by column, but this is not strictly enforced.
All provided operations preserve the lexicographical row-major sorting of data and indices. If there is any doubt about the
ordering of indices, use sortIndices()
to ensure they are explicitly sorted. CSR tensors may also store multiple entries
for the same index (referred to as an uncoalesced tensor). To combine all duplicated entries use coalesce()
or
coalesce(BinaryOperator)
.
CSR matrices are optimized for efficient storage and operations on matrices with a high proportion of zero elements.
CSR matrices are ideal for row-wise operations and matrix-vector multiplications. In general, CSR matrices are not efficient at
handling many incremental updates. In this case COO matrices
are usually preferred.
Conversion to other formats, such as COO or dense matrices, can be performed using toCoo()
or toDense()
.
Usage Examples:
// Define matrix data.
Shape shape = new Shape(8, 8);
double[] data = {1.0, 2.0, 3.0, 4.0};
int[] rowPointers = {0, 1, 1, 1, 1, 3, 3, 3, 4}
int[] colIndices = {0, 0, 5, 2};
// Create CSR matrix.
CsrMatrix matrix = new CsrMatrix(shape, data, rowPointers, colIndices);
// Add matrices.
CsrMatrix sum = matrix.add(matrix);
// Compute matrix-matrix multiplication.
Matrix prod = matrix.mult(matrix);
CsrMatrix sparseProd = matrix.mult2Csr(matrix);
// Compute matrix-vector multiplication.
Vector denseVector = new Vector(matrix.numCols, 5.0);
Matrix matrixVectorProd = matrix.mult(denseVector);
- See Also:
-
Field Summary
FieldsModifier 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.Fields inherited from class org.flag4j.arrays.backend.AbstractTensor
data, rank, shape
-
Constructor Summary
ConstructorsConstructorDescriptionCsrMatrix
(int numRows, int numCols) Constructs a zero matrix with the specified shape.CsrMatrix
(int numRows, int numCols, double[] entries, int[] rowPointers, int[] colIndices) Creates a sparse CSR matrix with the specifiedshape
, non-zero data, row pointers, and non-zero column indices.Constructs zero matrix with the specifiedshape
.Creates a sparse CSR matrix with the specifiedshape
, non-zero data, row pointers, and non-zero column indices. -
Method Summary
Modifier and TypeMethodDescription<R> R
accept
(MatrixVisitor<R> visitor) Accepts a visitor that implements theMatrixVisitor
interface.add
(Complex128 b) Adds a complex-valued scalar to all non-zero data of this sparse matrix.Computes the element-wise sum between two tensors of the same shape.int[]
argmax()
Finds the indices of the maximum value in this tensor.int[]
Finds the indices of the maximum absolute value in this tensor.int[]
argmin()
Finds the indices of the minimum value in this tensor.int[]
Finds the indices of the minimum absolute value in this tensor.Augments a vector to this matrix.Stacks matrices along rows.coalesce()
Coalesces this sparse CSR matrix.coalesce
(BinaryOperator<Double> aggregator) Coalesces this sparse COO matrix.int
Gets the length of the data array which backs this matrix.det()
Computes the determinant of a square matrix.Computes the element-wise quotient between two tensors.Drops any explicit zeros in this sparse COO matrix.Computes the element-wise multiplication of two tensors of the same shape.boolean
Checks if an object is equal to this matrix object.Computes the Frobenius inner product of two matrices.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
.getCol
(int colIdx) Get the column of this matrix at the specified index.getCol
(int colIdx, int rowStart, int rowEnd) Gets a specified column of this matrix betweenrowStart
(inclusive) androwEnd
(exclusive).getDiag()
Extracts the diagonal elements of this matrix and returns them as a vector.getDiag
(int diagOffset) Gets the elements of this matrix along the specified diagonal.getRow
(int rowIdx) Get the row of this matrix at the specified index.getRow
(int rowIdx, int colStart, int colEnd) Gets a specified row of this matrix betweencolStart
(inclusive) andcolEnd
(exclusive).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.H()
Computes the conjugate transpose of a tensor by exchanging the first and last axes of this tensor and conjugating the exchanged values.int
hashCode()
boolean
Checks if a matrix is anti-symmetric.boolean
Checks that this matrix is close to the identity 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.makeLikeTensor
(Shape shape, double[] entries) Constructs a CSR matrix of the same type as this matrix with the given theshape
anddata
and the same row pointers and column indices as this matrix.Computes the matrix multiplication between two matrices.Multiplies this sparse CSR matrix with a real dense matrix.Computes matrix-vector multiplication.mult
(CsrCMatrix b) Computes the matrix multiplication between two matrices.Computes the matrix multiplication between two matrices.Computes the matrix multiplication between two sparse CSR matrices and stores the result in a CSR matrix.Computes the matrix multiplication between two sparse CSR matrices and stores the result in a CSR matrix.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 column of this matrix at the given index to the specified values.Sets a row of this matrix at the given index to the specified values.setSliceCopy
(CsrMatrix values, int rowStart, int colStart) Creates a copy of this matrix and sets a slice of the copy to the specified values.void
Sorts the indices of this tensor in lexicographical order while maintaining the associated value for each index.double
sparsity()
The sparsity of this sparse CSR matrix.Stacks matrices along columns.sub
(Complex128 b) Subtracts a complex-valued scalar from all non-zero data of this sparse matrix.Computes the element-wise difference between two tensors of the same shape.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
.Computes the tensor contraction of this tensor with a specified tensor over the specified set of axes.tensorTr
(int axis1, int axis2) Computes the generalized trace of this tensor along the specified axes.toCoo()
Converts this CSR matrix to an equivalentCOO matrix
.toDense()
Converts this sparse CSR matrix to an equivalent dense matrix.toString()
Formats this sparse matrix as a human-readable string.toTensor()
Converts this sparse CSR matrix to an equivalent sparse COO tensor.toVector()
Converts this matrix to an equivalent vector.tr()
Computes the trace of this matrix.Methods inherited from class org.flag4j.arrays.backend.primitive_arrays.AbstractDoubleTensor
abs, add, add, addEq, addEq, conj, copy, div, div, divEq, divEq, H, H, isFinite, isInfinite, isNaN, isNeg, isOnes, isPos, isZeros, max, maxAbs, min, minAbs, mult, mult, multEq, multEq, prod, recip, round, round, roundToZero, roundToZero, sqrt, sub, sub, subEq, subEq, sum
Methods inherited from class org.flag4j.arrays.backend.AbstractTensor
getData, getRank, getShape, reshape, sameShape, totalEntries
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Field Details
-
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.
-
-
Constructor Details
-
CsrMatrix
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
.- Throws:
TensorShapeException
- Ifshape.getRank() != 2
.
-
CsrMatrix
public CsrMatrix(int numRows, int numCols, double[] entries, int[] rowPointers, int[] colIndices) Creates a sparse CSR matrix with the specifiedshape
, non-zero data, row pointers, and non-zero column indices.- Parameters:
numRows
- The number of rows in this matrix.numCols
- The number of columns in this matrix.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
.
-
CsrMatrix
public CsrMatrix(int numRows, int numCols) Constructs a zero matrix with the specified shape.- Parameters:
numRows
- Number of rows in the zero matrix to construct.numCols
- Number of columns in the zero matrix to construct.
-
CsrMatrix
Constructs zero matrix with the specifiedshape
.- Parameters:
shape
- Shape of the zero matrix to construct. Must be rank 2.- Throws:
TensorShapeException
- Ifshape.getRank() != 2
.
-
-
Method Details
-
dataLength
public int dataLength()Gets the length of the data array which backs this matrix.- Specified by:
dataLength
in interfaceMatrixMixin<CsrMatrix,
Matrix, CooVector, Double> - Returns:
- The length of the data array which backs this matrix.
-
tensorDot
Computes the tensor contraction of this tensor with a specified tensor over the specified set of axes. That is, computes the sum of products between the two tensors along the specified set of axes.- Specified by:
tensorDot
in interfaceTensorOverSemiring<CsrMatrix,
CsrMatrix, double[], Double> - Parameters:
src2
- Tensor to contract with this tensor.aAxes
- Axes along which to compute products for this tensor.bAxes
- Axes along which to compute products forsrc2
tensor.- Returns:
- The tensor dot product over the specified axes.
- Throws:
IllegalArgumentException
- If the two tensors shapes do not match along the specified axes pairwise inaAxes
andbAxes
.IllegalArgumentException
- IfaAxes
andbAxes
do not match in length, or if any of the axes are out of bounds for the corresponding tensor.
-
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<CsrMatrix,
CsrMatrix, double[], Double> - 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.)
-
set
Sets the element of this tensor at the specified indices.- Specified by:
set
in classAbstractTensor<CsrMatrix,
double[], Double> - Parameters:
value
- New value to set the specified index of this tensor to.indices
- Indices of the element to set.- Returns:
- A copy of this tensor with the updated value is returned.
- Throws:
IndexOutOfBoundsException
- Ifindices
is not within the bounds of this tensor.
-
flatten
Flattens tensor to single dimension while preserving order of data.- Specified by:
flatten
in classAbstractTensor<CsrMatrix,
double[], Double> - Returns:
- The flattened tensor.
- See Also:
-
flatten
Flattens a tensor along the specified axis.- Specified by:
flatten
in classAbstractTensor<CsrMatrix,
double[], Double> - 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<CsrMatrix,
double[], Double> - 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
.
-
get
Gets the element of this tensor at the specified indices.- Specified by:
get
in classAbstractTensor<CsrMatrix,
double[], Double> - 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 matrix.
-
makeLikeTensor
Constructs a CSR matrix of the same type as this matrix with the given theshape
anddata
and the same row pointers and column indices as this matrix.- Specified by:
makeLikeTensor
in interfaceTensorOverSemiring<CsrMatrix,
CsrMatrix, double[], Double> - Specified by:
makeLikeTensor
in classAbstractTensor<CsrMatrix,
double[], Double> - Parameters:
shape
- Shape of the tensor to construct.entries
- Entries of the tensor to construct.- Returns:
- A CSR matrix of the same type as this matrix with the given the
shape
anddata
and the same row pointers and column indices as this matrix.
-
T
Computes the transpose of a tensor by exchangingaxis1
andaxis2
.- Specified by:
T
in classAbstractTensor<CsrMatrix,
double[], Double> - 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<CsrMatrix,
double[], Double> - 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:
-
sparsity
public double sparsity()The sparsity of this sparse CSR matrix. That is, the decimal percentage of elements in this matrix which are zero.- Returns:
- The density of this sparse matrix.
-
toDense
Converts this sparse CSR matrix to an equivalent dense matrix.- Returns:
- A dense matrix equivalent to this sparse CSR matrix.
-
toCoo
Converts this CSR matrix to an equivalentCOO matrix
.- Returns:
- A
COO matrix
equivalent to this matrix.
-
sortIndices
public void sortIndices()Sorts the indices of this tensor in lexicographical order while maintaining the associated value for each index. -
numRows
-
numCols
-
get
Gets the element of this matrix at this specifiedrow
andcol
. -
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<CsrMatrix,
Matrix, CooVector, Double> - Returns:
- The trace of this matrix.
- Throws:
IllegalArgumentException
- If this matrix is not square.
-
isTriU
-
isTriL
-
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. -
isCloseToI
public boolean isCloseToI()Checks that this matrix is close to the identity matrix.- Returns:
- True if this matrix is approximately the identity matrix.
- See Also:
-
det
Computes the determinant of a square matrix.
WARNING: This method will convert the matrix to a dense matrix in order to compute the determinant.
- Returns:
- The determinant of this matrix.
- Throws:
LinearAlgebraException
- If this matrix is not square.
-
mult
Computes the matrix multiplication between two matrices.- Specified by:
mult
in interfaceMatrixMixin<CsrMatrix,
Matrix, CooVector, Double> - 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
.
-
mult2Csr
Computes the matrix multiplication between two sparse CSR matrices and stores the result in a CSR matrix.
Warning: This method will likely be slower than
mult(CsrMatrix)
if the result of multiplying this matrix withb
is not very sparse. Further, multiplying two sparse matrices may result in a dense matrix so this method should be used with caution.- Parameters:
b
- Matrix to multiply to this matrix.- Returns:
- The result of matrix multiplying this matrix with
b
as a sparse CSR matrix.
-
mult2Csr
Computes the matrix multiplication between two sparse CSR matrices and stores the result in a CSR matrix.
Warning: This method will likely be slower than
mult(CsrMatrix)
if the result of multiplying this matrix withb
is not very sparse. Further, multiplying two sparse matrices may result in a dense matrix so this method should be used with caution.- Parameters:
b
- Matrix to multiply to this matrix.- Returns:
- The result of matrix multiplying this matrix with
b
as a sparse CSR matrix.
-
mult
Computes the matrix multiplication between two matrices.- 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
.
-
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<CsrMatrix,
Matrix, CooVector, Double> - 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
.
-
fib
Computes the Frobenius inner product of two matrices.- Specified by:
fib
in interfaceMatrixMixin<CsrMatrix,
Matrix, CooVector, Double> - Parameters:
b
- Second matrix in the Frobenius inner product- Returns:
- The Frobenius inner product of this matrix and matrix b.
- Throws:
IllegalArgumentException
- If this matrix and b have different shapes.
-
stack
Stacks matrices along columns.- Specified by:
stack
in interfaceMatrixMixin<CsrMatrix,
Matrix, CooVector, Double> - 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<CsrMatrix,
Matrix, CooVector, Double> - 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
-
swapRows
Swaps specified rows in the matrix. This is done in place.- Specified by:
swapRows
in interfaceMatrixMixin<CsrMatrix,
Matrix, CooVector, Double> - 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<CsrMatrix,
Matrix, CooVector, Double> - 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<CsrMatrix,
Matrix, CooVector, Double> - Returns:
true
if this matrix is symmetric;false
otherwise.- See Also:
-
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<CsrMatrix,
Matrix, CooVector, Double> - Returns:
true
if this matrix is Hermitian;false
otherwise.
-
isAntiSymmetric
public boolean isAntiSymmetric()Checks if a matrix is anti-symmetric. That is, if the matrix is equal to the negative of its transpose.- Returns:
true
if this matrix is anti-symmetric;false
otherwise.- See Also:
-
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<CsrMatrix,
Matrix, CooVector, Double> - Returns:
true
if this matrix it is orthogonal;false
otherwise.
-
removeRow
-
removeRows
Removes a specified set of rows from this matrix.- Specified by:
removeRows
in interfaceMatrixMixin<CsrMatrix,
Matrix, CooVector, Double> - 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. -
removeCols
Removes a specified set of columns from this matrix.- Specified by:
removeCols
in interfaceMatrixMixin<CsrMatrix,
Matrix, CooVector, Double> - 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<CsrMatrix,
Matrix, CooVector, Double> - 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<CsrMatrix,
Matrix, CooVector, Double> - 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. -
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<CsrMatrix,
Matrix, CooVector, Double> - 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<CsrMatrix,
Matrix, CooVector, Double> - 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).
-
mult
Computes matrix-vector multiplication.- Specified by:
mult
in interfaceMatrixMixin<CsrMatrix,
Matrix, CooVector, Double> - Parameters:
b
- Vector in the matrix-vector multiplication.- Returns:
- The result of matrix multiplying this matrix with vector
b
. - Throws:
IllegalArgumentException
- If the number of columns in this matrix do not equal the number of data in the vectorb
.
-
toVector
Converts this matrix to an equivalent vector. If this matrix is not shaped as a row/column vector, it will first be flattened then converted to a vector. -
toTensor
Converts this sparse CSR matrix to an equivalent sparse COO tensor.- Returns:
-
getRow
Get the row of this matrix at the specified index.- Specified by:
getRow
in interfaceMatrixMixin<CsrMatrix,
Matrix, CooVector, Double> - Parameters:
rowIdx
- Index of row to get.- Returns:
- The specified row of this matrix.
- Throws:
ArrayIndexOutOfBoundsException
- IfrowIdx
is less than zero or greater than/equal to the number of rows in this matrix.
-
getRow
Gets a specified row of this matrix betweencolStart
(inclusive) andcolEnd
(exclusive).- Specified by:
getRow
in interfaceMatrixMixin<CsrMatrix,
Matrix, CooVector, Double> - Parameters:
rowIdx
- Index of the row of this matrix to get.colStart
- Starting column of the row (inclusive).colEnd
- Ending column of the row (exclusive).- Returns:
- The row at index
rowIdx
of this matrix between thecolStart
andcolEnd
indices. - Throws:
IndexOutOfBoundsException
- If eithercolEnd
arecolStart
out of bounds for the shape of this matrix.IllegalArgumentException
- IfcolEnd
is less thancolStart
.
-
getCol
Get the column of this matrix at the specified index.- Specified by:
getCol
in interfaceMatrixMixin<CsrMatrix,
Matrix, CooVector, Double> - Parameters:
colIdx
- Index of column to get.- Returns:
- The specified column of this matrix.
- Throws:
ArrayIndexOutOfBoundsException
- IfcolIdx
is less than zero or greater than/equal to the number of columns in this matrix.
-
getCol
Gets a specified column of this matrix betweenrowStart
(inclusive) androwEnd
(exclusive).- Specified by:
getCol
in interfaceMatrixMixin<CsrMatrix,
Matrix, CooVector, Double> - Parameters:
colIdx
- Index of the column of this matrix to get.rowStart
- Starting row of the column (inclusive).rowEnd
- Ending row of the column (exclusive).- Returns:
- The column at index
colIdx
of this matrix between therowStart
androwEnd
indices. - Throws:
IllegalArgumentException
- IfrowEnd
is less thanrowStart
.
-
getDiag
-
getDiag
Gets the elements of this matrix along the specified diagonal.- Specified by:
getDiag
in interfaceMatrixMixin<CsrMatrix,
Matrix, CooVector, Double> - Parameters:
diagOffset
- The diagonal to get within this matrix.- If
diagOffset == 0
: Then the elements of the principle diagonal are collected. - If
diagOffset < 0
: Then the elements of the sub-diagonaldiagOffset
below the principle diagonal are collected. - If
diagOffset > 0
: Then the elements of the super-diagonaldiagOffset
above the principle diagonal are collected.
- If
- Returns:
- The elements of the specified diagonal as a vector.
-
setCol
Sets a column of this matrix at the given index to the specified values.- Specified by:
setCol
in interfaceMatrixMixin<CsrMatrix,
Matrix, CooVector, Double> - Parameters:
values
- New values for the column.colIndex
- The index of the column which is to be set.- Returns:
- A reference to this matrix.
- Throws:
IndexOutOfBoundsException
- If the values vector has a different length than the number of rows of this matrix.
-
setRow
Sets a row of this matrix at the given index to the specified values.- Specified by:
setRow
in interfaceMatrixMixin<CsrMatrix,
Matrix, CooVector, Double> - Parameters:
values
- New values for the row.rowIndex
- The index of the row which is to be set.- Returns:
- A reference to this matrix.
- Throws:
IndexOutOfBoundsException
- If the values vector has a different length than the number of rows of this matrix.
-
T
-
accept
Accepts a visitor that implements theMatrixVisitor
interface. This method is part of the "Visitor Pattern" and allows operations to be performed on the matrix without modifying the matrix's class directly.- Specified by:
accept
in interfaceMatrixMixin<CsrMatrix,
Matrix, CooVector, Double> - Type Parameters:
R
- The return type of the visitor's operation.- Parameters:
visitor
- The visitor implementing the operation to be performed.- Returns:
- The result of the visitor's operation, typically another matrix or a scalar value.
- Throws:
NullPointerException
- if the visitor isnull
.
-
equals
Checks if an object is equal to this matrix object. -
hashCode
-
mult
Multiplies this sparse CSR matrix with a real dense matrix.- Parameters:
b
- The real dense matrix in the matrix-matrix product.- Returns:
- Computes the matrix product of this matrix and
b
. - Throws:
IllegalArgumentException
- Ifthis.numCols != b.numRows
.
-
mult
Computes the matrix multiplication between two matrices.- Parameters:
B
- Second matrix in the matrix multiplication.- Returns:
- The result of matrix multiplying this matrix with matrix B.
- Throws:
IllegalArgumentException
- If the number of columns in this matrix do not equal the number of rows in matrix B.
-
add
Computes the element-wise sum between two tensors of the same shape.- Specified by:
add
in interfaceMatrixMixin<CsrMatrix,
Matrix, CooVector, Double> - Specified by:
add
in interfaceTensorOverSemiring<CsrMatrix,
CsrMatrix, double[], Double> - Parameters:
b
- Second tensor in the element-wise sum.- Returns:
- The sum of this tensor with
b
. - Throws:
IllegalArgumentException
- 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<CsrMatrix,
Matrix, CooVector, Double> - Specified by:
elemMult
in interfaceTensorOverSemiring<CsrMatrix,
CsrMatrix, double[], Double> - 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.
-
sub
Computes the element-wise difference between two tensors of the same shape.- Specified by:
sub
in interfaceMatrixMixin<CsrMatrix,
Matrix, CooVector, Double> - Specified by:
sub
in interfaceTensorOverRing<CsrMatrix,
CsrMatrix, double[], Double> - Parameters:
b
- Second tensor in the element-wise difference.- Returns:
- The difference of this tensor with
b
. - Throws:
IllegalArgumentException
- If this tensor andb
do not have the same shape.
-
H
Computes the conjugate transpose of a tensor by exchanging the first and last axes of this tensor and conjugating the exchanged values. -
argmin
public int[] argmin()Finds the indices of the minimum value in this tensor.- Specified by:
argmin
in interfaceTensorOverRing<CsrMatrix,
CsrMatrix, double[], Double> - Returns:
- The indices of the minimum value in this tensor. If this value occurs multiple times, the indices of the first entry (in row-major ordering) are returned.
-
argmax
public int[] argmax()Finds the indices of the maximum value in this tensor.- Specified by:
argmax
in interfaceTensorOverRing<CsrMatrix,
CsrMatrix, double[], Double> - Returns:
- The indices of the maximum value in this tensor. If this value occurs multiple times, the indices of the first entry (in row-major ordering) are returned.
-
argminAbs
public int[] argminAbs()Finds the indices of the minimum absolute value in this tensor.- Specified by:
argminAbs
in interfaceTensorOverRing<CsrMatrix,
CsrMatrix, double[], Double> - Returns:
- The indices of the minimum absolute value in this tensor. If this value occurs multiple times, the indices of the first entry (in row-major ordering) are returned.
-
argmaxAbs
public int[] argmaxAbs()Finds the indices of the maximum absolute value in this tensor.- Specified by:
argmaxAbs
in interfaceTensorOverRing<CsrMatrix,
CsrMatrix, double[], Double> - Returns:
- The indices of the maximum absolute value in this tensor. If this value occurs multiple times, the indices of the first entry (in row-major ordering) are returned.
-
add
Adds a complex-valued scalar to all non-zero data of this sparse matrix.- Parameters:
b
- scalar to add.- Returns:
- The result of adding this matrix to
b
.
-
sub
Subtracts a complex-valued scalar from all non-zero data of this sparse matrix.- Parameters:
b
- scalar to subtract.- Returns:
- The result of subtracting
b
from this matrix's non-zero data.
-
div
Computes the element-wise quotient between two tensors.
Warning: This method is not supported for sparse matrices. If called on a sparse matrix, an
UnsupportedOperationException
will be thrown as the operation would almost certainly result in a division by zero. -
dropZeros
Drops any explicit zeros in this sparse COO matrix.- Returns:
- A copy of this Csr matrix with any explicitly stored zeros removed.
-
coalesce
Coalesces this sparse CSR matrix. An uncoalesced matrix is a sparse matrix with multiple data for a single index. This method will ensure that each index only has one non-zero value by summing duplicated data. If another form of aggregation other than summing is desired, usecoalesce(BinaryOperator)
.- Returns:
- A new coalesced sparse CSR matrix which is equivalent to this CSR matrix.
- See Also:
-
coalesce
Coalesces this sparse COO matrix. An uncoalesced matrix is a sparse matrix with multiple data for a single index. This method will ensure that each index only has one non-zero value by aggregating duplicated data usingaggregator
.- Parameters:
aggregator
- Custom aggregation function to combine multiple.- Returns:
- A new coalesced sparse COO matrix which is equivalent to this COO matrix.
- See Also:
-
toString
-