A base matrix (also see Base_matrix), but with column compression. That is, all identical columns in the matrix are compressed together as the same column. For matrices with a lot of redundant columns, this will save a lot of space. Also, any addition made onto a column will be performed at the same time on all other identical columns, which is an advantage for the cohomology algorithm for example. More...
#include <gudhi/Persistence_matrix/Base_matrix_with_column_compression.h>
Classes | |
class | Column |
Type for columns. Only one for each "column class" is explicitly constructed. More... | |
Public Types | |
using | Index = typename Master_matrix::Index |
using | Dimension = typename Master_matrix::Dimension |
using | Field_operators = typename Master_matrix::Field_operators |
Field operators class. Necessary only if PersistenceMatrixOptions::is_z2 is false. | |
using | Field_element = typename Master_matrix::Element |
using | Row = typename Master_matrix::Row |
using | Entry_constructor = typename Master_matrix::Entry_constructor |
using | Column_settings = typename Master_matrix::Column_settings |
Public Member Functions | |
Base_matrix_with_column_compression (Column_settings *colSettings) | |
Constructs an empty matrix. More... | |
template<class Container > | |
Base_matrix_with_column_compression (const std::vector< Container > &columns, Column_settings *colSettings) | |
Constructs a matrix from the given ordered columns. The columns are inserted in the given order. If no identical column already existed, a copy of the column is stored. If an identical one existed, no new column is constructed and the relationship between the two is registered in an union-find structure. More... | |
Base_matrix_with_column_compression (unsigned int numberOfColumns, Column_settings *colSettings) | |
Constructs a new empty matrix and reserves space for the given number of columns. More... | |
Base_matrix_with_column_compression (const Base_matrix_with_column_compression &matrixToCopy, Column_settings *colSettings=nullptr) | |
Copy constructor. If colSettings is not a null pointer, its value is kept instead of the one in the copied matrix. More... | |
Base_matrix_with_column_compression (Base_matrix_with_column_compression &&other) noexcept | |
Move constructor. More... | |
~Base_matrix_with_column_compression () | |
Destructor. | |
template<class Container > | |
void | insert_column (const Container &column) |
Inserts a new ordered column at the end of the matrix by copying the given range of Matrix::Entry_representative. The content of the range is assumed to be sorted by increasing ID value. More... | |
template<class Boundary_range > | |
void | insert_boundary (const Boundary_range &boundary, Dimension dim=Master_matrix::template get_null_value< Dimension >()) |
Same as insert_column, only for interface purposes. The given dimension is ignored and not stored. More... | |
const Column & | get_column (Index columnIndex) |
Returns the column at the given MatIdx index. The type of the column depends on the chosen options, see PersistenceMatrixOptions::column_type. More... | |
const Row & | get_row (Index rowIndex) const |
Only available if PersistenceMatrixOptions::has_row_access is true. Returns the row at the given row index of the compressed matrix. The type of the row depends on the chosen options, see PersistenceMatrixOptions::has_intrusive_rows. Note that the row will be from the compressed matrix, that is, the one with only unique columns. More... | |
void | erase_empty_row (Index rowIndex) |
If PersistenceMatrixOptions::has_row_access and PersistenceMatrixOptions::has_removable_rows are true: assumes that the row is empty and removes it. Otherwise, does nothing. More... | |
Index | get_number_of_columns () const |
Returns the current number of columns in the matrix, counting also the redundant columns. More... | |
template<class Entry_range_or_column_index > | |
void | add_to (const Entry_range_or_column_index &sourceColumn, Index targetColumnIndex) |
Adds column represented by sourceColumn onto the column at targetColumnIndex in the matrix. More... | |
template<class Entry_range_or_column_index > | |
void | multiply_target_and_add_to (const Entry_range_or_column_index &sourceColumn, const Field_element &coefficient, Index targetColumnIndex) |
Multiplies the target column with the coefficient and then adds the source column to it. That is: targetColumn = (targetColumn * coefficient) + sourceColumn . More... | |
template<class Entry_range_or_column_index > | |
void | multiply_source_and_add_to (const Field_element &coefficient, const Entry_range_or_column_index &sourceColumn, Index targetColumnIndex) |
Multiplies the source column with the coefficient before adding it to the target column. That is: targetColumn += (coefficient * sourceColumn) . The source column will not be modified. More... | |
bool | is_zero_entry (Index columnIndex, Index rowIndex) |
Indicates if the entry at given coordinates has value zero. More... | |
bool | is_zero_column (Index columnIndex) |
Indicates if the column at given index has value zero. More... | |
void | reset (Column_settings *colSettings) |
Resets the matrix to an empty matrix. More... | |
Base_matrix_with_column_compression & | operator= (const Base_matrix_with_column_compression &other) |
Assign operator. | |
Friends | |
void | swap (Base_matrix_with_column_compression &matrix1, Base_matrix_with_column_compression &matrix2) |
Swap operator. | |
A base matrix (also see Base_matrix), but with column compression. That is, all identical columns in the matrix are compressed together as the same column. For matrices with a lot of redundant columns, this will save a lot of space. Also, any addition made onto a column will be performed at the same time on all other identical columns, which is an advantage for the cohomology algorithm for example.
Master_matrix | An instantiation of Matrix from which all types and options are deduced. |
using Gudhi::persistence_matrix::Base_matrix_with_column_compression< Master_matrix >::Column_settings = typename Master_matrix::Column_settings |
Structure giving access to the columns to necessary external classes.
using Gudhi::persistence_matrix::Base_matrix_with_column_compression< Master_matrix >::Dimension = typename Master_matrix::Dimension |
Dimension value type.
using Gudhi::persistence_matrix::Base_matrix_with_column_compression< Master_matrix >::Entry_constructor = typename Master_matrix::Entry_constructor |
Factory of Entry classes.
using Gudhi::persistence_matrix::Base_matrix_with_column_compression< Master_matrix >::Field_element = typename Master_matrix::Element |
Field element value type.
using Gudhi::persistence_matrix::Base_matrix_with_column_compression< Master_matrix >::Index = typename Master_matrix::Index |
Container index type.
using Gudhi::persistence_matrix::Base_matrix_with_column_compression< Master_matrix >::Row = typename Master_matrix::Row |
Row type, only necessary with row access option.
|
inline |
Constructs an empty matrix.
colSettings | Pointer to an existing setting structure for the columns. The structure should contain all the necessary external classes specifically necessary for the chosen column type, such as custom allocators. |
|
inline |
Constructs a matrix from the given ordered columns. The columns are inserted in the given order. If no identical column already existed, a copy of the column is stored. If an identical one existed, no new column is constructed and the relationship between the two is registered in an union-find structure.
Container | Range type for Matrix::Entry_representative ranges. Assumed to have a begin(), end() and size() method. |
columns | A vector of Matrix::Entry_representative ranges to construct the columns from. The content of the ranges are assumed to be sorted by increasing ID value. |
colSettings | Pointer to an existing setting structure for the columns. The structure should contain all the necessary external classes specifically necessary for the chosen column type, such as custom allocators. |
|
inline |
Constructs a new empty matrix and reserves space for the given number of columns.
numberOfColumns | Number of columns to reserve space for. |
colSettings | Pointer to an existing setting structure for the columns. The structure should contain all the necessary external classes specifically necessary for the chosen column type, such as custom allocators. |
|
inline |
Copy constructor. If colSettings
is not a null pointer, its value is kept instead of the one in the copied matrix.
matrixToCopy | Matrix to copy. |
colSettings | Either a pointer to an existing setting structure for the columns or a null pointer. The structure should contain all the necessary external classes specifically necessary for the chosen column type, such as custom allocators. If null pointer, the pointer stored in matrixToCopy is used instead. |
|
inlinenoexcept |
Move constructor.
other | Matrix to move. |
|
inline |
Adds column represented by sourceColumn
onto the column at targetColumnIndex
in the matrix.
The representatives of redundant columns are summed together, which means that all column compressed together with the target column are affected by the change, not only the target.
Entry_range_or_column_index | Either a range of Entry with a begin() and end() method, or any integer type. |
|
inline |
If PersistenceMatrixOptions::has_row_access and PersistenceMatrixOptions::has_removable_rows are true: assumes that the row is empty and removes it. Otherwise, does nothing.
rowIndex | Row index of the empty row. |
|
inline |
Returns the column at the given MatIdx index. The type of the column depends on the chosen options, see PersistenceMatrixOptions::column_type.
Remark: the method it-self is not const, because of the path compression optimization of the union-find structure, when a column is looked up.
columnIndex | MatIdx index of the column to return. |
|
inline |
Returns the current number of columns in the matrix, counting also the redundant columns.
|
inline |
Only available if PersistenceMatrixOptions::has_row_access is true. Returns the row at the given row index of the compressed matrix. The type of the row depends on the chosen options, see PersistenceMatrixOptions::has_intrusive_rows. Note that the row will be from the compressed matrix, that is, the one with only unique columns.
rowIndex | Row index of the row to return. |
|
inline |
Same as insert_column, only for interface purposes. The given dimension is ignored and not stored.
Boundary_range | Range of Matrix::Entry_representative. Assumed to have a begin(), end() and size() method. |
boundary | Range of Matrix::Entry_representative from which the column has to be constructed. Assumed to be ordered by increasing ID value. |
dim | Ignored. |
|
inline |
Inserts a new ordered column at the end of the matrix by copying the given range of Matrix::Entry_representative. The content of the range is assumed to be sorted by increasing ID value.
Container | Range of Matrix::Entry_representative. Assumed to have a begin(), end() and size() method. |
column | Range of Matrix::Entry_representative from which the column has to be constructed. Assumed to be ordered by increasing ID value. |
|
inline |
Indicates if the column at given index has value zero.
columnIndex | MatIdx index of the column. |
|
inline |
|
inline |
Multiplies the source column with the coefficient before adding it to the target column. That is: targetColumn += (coefficient * sourceColumn)
. The source column will not be modified.
The representatives of redundant columns are summed together, which means that all column compressed together with the target column are affected by the change, not only the target.
Entry_range_or_column_index | Either a range of Entry with a begin() and end() method, or any integer type. |
|
inline |
Multiplies the target column with the coefficient and then adds the source column to it. That is: targetColumn = (targetColumn * coefficient) + sourceColumn
.
The representatives of redundant columns are summed together, which means that all column compressed together with the target column are affected by the change, not only the target.
Entry_range_or_column_index | Either a range of Entry with a begin() and end() method, or any integer type. |
|
inline |
Resets the matrix to an empty matrix.
colSettings | Pointer to the entry factory. |