![]() |
Functions | |
template<size_t I, size_t... Is, typename MT , bool SO, typename... RCAs> | |
decltype(auto) | blaze::columns (Matrix< MT, SO > &matrix, RCAs... args) |
Creating a view on a selection of columns of the given matrix. More... | |
template<size_t I, size_t... Is, typename MT , bool SO, typename... RCAs> | |
decltype(auto) | blaze::columns (const Matrix< MT, SO > &matrix, RCAs... args) |
Creating a view on a selection of columns of the given constant matrix. More... | |
template<size_t I, size_t... Is, typename MT , bool SO, typename... RCAs> | |
decltype(auto) | blaze::columns (Matrix< MT, SO > &&matrix, RCAs... args) |
Creating a view on a selection of columns of the given temporary matrix. More... | |
template<typename MT , bool SO, typename T , typename... RCAs> | |
decltype(auto) | blaze::columns (Matrix< MT, SO > &matrix, const T *indices, size_t n, RCAs... args) |
Creating a view on a selection of columns of the given matrix. More... | |
template<typename MT , bool SO, typename T , typename... RCAs> | |
decltype(auto) | blaze::columns (const Matrix< MT, SO > &matrix, const T *indices, size_t n, RCAs... args) |
Creating a view on a selection of columns of the given constant matrix. More... | |
template<typename MT , bool SO, typename T , typename... RCAs> | |
decltype(auto) | blaze::columns (Matrix< MT, SO > &&matrix, const T *indices, size_t n, RCAs... args) |
Creating a view on a selection of columns of the given temporary matrix. More... | |
Column selections provide views on arbitrary compositions of columns of dense and sparse matrices. These views act as a reference to the selected columns and represent them as another dense or sparse matrix. This reference is valid and can be used in every way any other dense or sparse matrix can be used as long as the matrix containing the columns is not resized or entirely destroyed. The column selection also acts as an alias to the matrix elements in the specified range: Changes made to the columns (e.g. modifying values, inserting or erasing elements) are immediately visible in the matrix and changes made via the matrix are immediately visible in the columns.
A column selection can be created very conveniently via the columns()
function. It can be included via the header file
The indices of the columns to be selected can be specified either at compile time or at runtime (by means of an initializer list, array or vector):
Note that it is possible to alias the columns of the underlying matrix in any order. Also note that it is possible to use the same index multiple times. The columns()
function returns an expression representing the view on the selected columns. The type of this expression depends on the given arguments, primarily the type of the matrix and the compile time arguments. If the type is required, it can be determined via decltype
or via the ColumnsExprTrait
class template:
The resulting view can be treated as any other dense or sparse matrix, i.e. it can be assigned to, it can be copied from, and it can be used in arithmetic operations. Note, however, that a column selection will always be treated as a column-major matrix, regardless of the storage order of the matrix containing the columns. The view can also be used on both sides of an assignment: It can either be used as an alias to grant write access to specific columns of a matrix primitive on the left-hand side of an assignment or to grant read-access to specific columns of a matrix primitive or expression on the right-hand side of an assignment. The following example demonstrates this in detail:
The elements of a column selection can be directly accessed via the function call operator:
Alternatively, the elements of a column selection can be traversed via (const) iterators. Just as with matrices, in case of non-const column selection, begin()
and end()
return an iterator, which allows to manipuate the elements, in case of constant column selection an iterator to immutable elements is returned:
Inserting/accessing elements in a sparse column selection can be done by several alternative functions. The following example demonstrates all options:
A view on specific columns of a matrix can be used like any other dense or sparse matrix. For instance, the current size of the matrix, i.e. the number of rows or columns can be obtained via the rows()
and columns()
functions, the current total capacity via the capacity()
function, and the number of non-zero elements via the nonZeros()
function. However, since column selections are views on specific columns of a matrix, several operations are not possible, such as resizing and swapping:
Both dense and sparse column selections can be used in all arithmetic operations that any other dense or sparse matrix can be used in. The following example gives an impression of the use of dense column selctions within arithmetic operations. All operations (addition, subtraction, multiplication, scaling, ...) can be performed on all possible combinations of dense and sparse matrices with fitting element types:
Especially noteworthy is that column selections can be created for both row-major and column-major matrices. Whereas the interface of a row-major matrix only allows to traverse a row directly and the interface of a column-major matrix only allows to traverse a column, via views it is possible to traverse a row of a column-major matrix or a column of a row-major matrix. For instance:
However, please note that creating a column selection on a matrix stored in a row-major fashion can result in a considerable performance decrease in comparison to a column selection on a matrix with column-major storage format. This is due to the non-contiguous storage of the matrix elements. Therefore care has to be taken in the choice of the most suitable storage order:
Although Blaze performs the resulting matrix/matrix multiplication as efficiently as possible using a column-major storage order for matrix A
would result in a more efficient evaluation.
|
inline |
Creating a view on a selection of columns of the given matrix.
matrix | The matrix containing the columns. |
args | Optional arguments. |
std::invalid_argument | Invalid column access index. |
This function returns an expression representing a selection of columns of the given matrix.
By default, the provided column indices are checked at runtime. In case any column is not properly specified (i.e. if any specified index is greater than or equal to the total number of columns in the given matrix) a std::invalid_argument exception is thrown. The checks can be skipped by providing the optional blaze::unchecked argument.
|
inline |
Creating a view on a selection of columns of the given constant matrix.
matrix | The constant matrix containing the columns. |
args | Optional arguments. |
std::invalid_argument | Invalid column access index. |
This function returns an expression representing a selection of columns of the given constant matrix.
By default, the provided column indices are checked at runtime. In case any column is not properly specified (i.e. if any specified index is greater than or equal to the total number of columns in the given matrix) a std::invalid_argument exception is thrown. The checks can be skipped by providing the optional blaze::unchecked argument.
|
inline |
Creating a view on a selection of columns of the given temporary matrix.
matrix | The temporary matrix containing the columns. |
args | Optional arguments. |
std::invalid_argument | Invalid column access index. |
This function returns an expression representing a selection of columns of the given temporary matrix. In case any column is not properly specified (i.e. if any specified index is greater than or equal to the total number of columns in the given matrix) a std::invalid_argument exception is thrown.
|
inline |
Creating a view on a selection of columns of the given matrix.
matrix | The matrix containing the columns. |
indices | Pointer to the first index of the selected columns. |
n | The total number of indices. |
args | Optional arguments. |
std::invalid_argument | Invalid column access index. |
This function returns an expression representing a selection of columns of the given matrix.
By default, the provided column indices are checked at runtime. In case any column is not properly specified (i.e. if any specified index is greater than or equal to the total number of columns in the given matrix) a std::invalid_argument exception is thrown. The checks can be skipped by providing the optional blaze::unchecked argument.
|
inline |
Creating a view on a selection of columns of the given constant matrix.
matrix | The constant matrix containing the columns. |
indices | Pointer to the first index of the selected columns. |
n | The total number of indices. |
args | Optional arguments. |
std::invalid_argument | Invalid column access index. |
This function returns an expression representing a selection of columns of the given constant matrix.
By default, the provided column indices are checked at runtime. In case any column is not properly specified (i.e. if any specified index is greater than or equal to the total number of columns in the given matrix) a std::invalid_argument exception is thrown. The checks can be skipped by providing the optional blaze::unchecked argument.
|
inline |
Creating a view on a selection of columns of the given temporary matrix.
matrix | The temporary matrix containing the columns. |
indices | Pointer to the first index of the selected columns. |
n | The total number of indices. |
args | Optional arguments. |
std::invalid_argument | Invalid column access index. |
This function returns an expression representing a selection of columns of the given temporary matrix. In case any column is not properly specified (i.e. if any specified index is greater than or equal to the total number of columns in the given matrix) a std::invalid_argument exception is thrown.