Reduction and Norm¶
Reduction¶
-
template<typename E>
inline PartialRedux<E, internal::redux_sum_op, internal::kRowwise> sum(const MatrixBase<E> &expr, internal::Rowwise)¶
-
template<typename E>
inline PartialRedux<E, internal::redux_sum_op, internal::kColwise> sum(const MatrixBase<E> &expr, internal::Colwise)¶
-
template<typename E>
inline E::value_type sum(const MatrixBase<E> &expr)¶ Calculates the sum of the elements in a matrix, vector or expression over a given axis. If
axis == none
, this applies the operation over the entire expression.Example:
using namespace mocca; Matrix<int> mat = {{1, 2, 3}, {2, 3, 4}, {5, 5, 5}}; std::cout << "The sum of the elements in each col is: \n"; std::cout << sum(mat, colwise) << "\n"; std::cout << "The sum of all elements is: "; std::cout << sum(mat) << "\n";
Output:
The sum of the elements in each col is [ 8 10 12 ] The sum of all elements is: 30
Complexity: Linear in
expr.size()
- Parameters:
expr – [in] matrix, vector or expression
axis – [in] either
no_axis
(default),rowwise
orcolwise
(optional)
- Returns:
the resulting scalar if
no_axis
. A expression containing the partial reduction over the specified axis, otherwise.
-
template<typename E>
inline PartialRedux<E, internal::redux_prod_op, internal::kRowwise> prod(const MatrixBase<E> &expr, internal::Rowwise)¶
-
template<typename E>
inline PartialRedux<E, internal::redux_prod_op, internal::kColwise> prod(const MatrixBase<E> &expr, internal::Colwise)¶
-
template<typename E>
inline E::value_type prod(const MatrixBase<E> &expr)¶ Calculates the product of the elements in a matrix, vector or expression over a given axis. If
axis == none
, this applies the operation over the entire expression.Example:
using namespace mocca; Matrix<int> mat = {{1, 2, 3}, {2, 3, 4}, {5, 5, 5}}; std::cout << "The product of the elements in each col is: \n"; std::cout << prod(mat, colwise) << "\n"; std::cout << "The product of all elements is: "; std::cout << prod(mat) << "\n";
Output:
The product of the elements in each col is [ 10 30 60 ] The product of all elements is: 18000
Complexity: Linear in
expr.size()
Warning
This routine can easily result in a underflow or overflow if not careful.
- Parameters:
expr – [in] matrix, vector or expression
axis – [in] either
no_axis
(default),rowwise
orcolwise
(optional)
- Returns:
the resulting scalar if
no_axis
. A expression containing the partial reduction over the specified axis, otherwise.
-
template<typename E>
inline PartialRedux<E, internal::redux_max_op, internal::kRowwise> max(const MatrixBase<E> &expr, internal::Rowwise)¶
-
template<typename E>
inline PartialRedux<E, internal::redux_max_op, internal::kColwise> max(const MatrixBase<E> &expr, internal::Colwise)¶
-
template<typename E>
inline E::value_type max(const MatrixBase<E> &expr)¶ Finds the maximum value in a matrix, vector or expression over a given axis. If
axis == none
, this applies the operation over the entire expression.Example:
using namespace mocca; Matrix<int> mat = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; std::cout << "The maximum value in each row is: \n"; std::cout << max(mat, rowwise) << "\n"; std::cout << "The maximum of the matrix is: "; std::cout << max(mat) << "\n";
Output:
The maximum value in each row is: [3 6 9] The maximum of the matrix is: 9
Complexity: Linear in
expr.size()
- Parameters:
expr – [in] matrix, vector or expression
axis – [in] either
no_axis
(default),rowwise
orcolwise
(optional)
- Returns:
the resulting scalar if
no_axis
. A expression containing the partial reduction over the specified axis, otherwise.
-
template<typename E>
inline PartialRedux<E, internal::redux_min_op, internal::kRowwise> min(const MatrixBase<E> &expr, internal::Rowwise)¶
-
template<typename E>
inline PartialRedux<E, internal::redux_min_op, internal::kColwise> min(const MatrixBase<E> &expr, internal::Colwise)¶
-
template<typename E>
inline E::value_type min(const MatrixBase<E> &expr)¶ Finds the minimum value in a matrix, vector or expression over a given axis. If
axis == none
, this applies the operation over the entire expression.Example:
using namespace mocca; Matrix<int> mat = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; std::cout << "The minimum value in each row is: \n"; std::cout << min(mat, rowwise) << "\n"; std::cout << "The minimum of the matrix is: "; std::cout << min(mat) << "\n";
Output:
The minimum value in each row is: [1 4 7] The minimum of the matrix is: 1
Complexity: Linear in
expr.size()
- Parameters:
expr – [in] matrix, vector or expression
axis – [in] either
no_axis
(default),rowwise
orcolwise
(optional)
- Returns:
the resulting scalar if
no_axis
. A expression containing the partial reduction over the specified axis, otherwise.
Norm¶
-
template<typename E>
inline PartialRedux<E, internal::norm_l1_op, internal::kRowwise> norm_l1(const MatrixBase<E> &expr, internal::Rowwise)¶
-
template<typename E>
inline PartialRedux<E, internal::norm_l1_op, internal::kColwise> norm_l1(const MatrixBase<E> &expr, internal::Colwise)¶
-
template<typename E>
inline E::value_type norm_l1(const MatrixBase<E> &expr)¶ Calculates the L1 norm of an expression (i.e., \( \|x\|_1 = \|x_1\| + \|x_2\| + ... + \|x_n\|\) with n equal to the size of the expression). If
axis == none
, this applies the operation over the entire expression.Example:
using namespace mocca; Matrix<int> mat = {{1, -2, 3}, {2, 3, -4}, {-5, 5, -5}}; std::cout << "The l1 norm of the elements in each col is: \n"; std::cout << norm_l1(mat, colwise) << "\n"; std::cout << "The l1 norm of all elements is: "; std::cout << norm_l1(mat) << "\n";
Output:
The l1 norm of the elements in each col is [ 8 10 12 ] The l1 norm of all elements is: 30
Complexity: Linear in
expr.size()
- Parameters:
expr – [in] matrix, vector or expression
axis – [in] either
no_axis
(default),rowwise
orcolwise
(optional)
- Returns:
the resulting scalar if
no_axis
. A expression containing the partial reduction over the specified axis, otherwise.
-
template<typename E>
inline double norm_l2(const MatrixBase<E> &expr)¶ Calculates the L2 norm of an expression (i.e., \( \|x\|_2 = \sqrt{\|x_1\|^2 + \|x_2\|^2 + ... + \|x_n\|^2}\) with n equal to the size of the expression). If
axis == none
, this applies the operation over the entire expression. The L2 norm of matrices is also called “Frobenius norm”.Example:
using namespace mocca; Matrix<int> mat = {{1, -2, 3}, {2, 3, -4}, {-5, 5, -5}}; std::cout << "The l2 norm of the elements in each row is: \n"; std::cout << norm_l2(mat, rowwise) << "\n"; std::cout << "The l2 norm of all elements is: "; std::cout << norm_l2(mat) << "\n";
Output:
The l2 norm of the elements in each col is [ 3.4641 5.3852 8.6603 ] The l2 norm of all elements is: 10.8628
Complexity: Linear in
expr.size()
- Parameters:
expr – [in] vector or matrix expression
axis – [in] operation axis (optional, matrix expression only)
-
template<typename E>
inline PartialRedux<E, internal::norm_max_op, internal::kRowwise> norm_max(const MatrixBase<E> &expr, internal::Rowwise)¶
-
template<typename E>
inline PartialRedux<E, internal::norm_max_op, internal::kColwise> norm_max(const MatrixBase<E> &expr, internal::Colwise)¶
-
template<typename E>
inline E::value_type norm_max(const MatrixBase<E> &expr)¶ Calculates the max norm of an expression (i.e., \( \|x\|_\inf = max(\|x_1\|, \|x_2\|, ..., \|x_n\|)\) with n equal to the size of the expression). If
axis == none
, this applies the operation over the entire expression.Example:
using namespace mocca; Matrix<int> mat = {{1, -2, 3}, {2, 3, -8}, {-5, 5, -5}}; std::cout << "The l-infinity norm of the elements in each col is: \n"; std::cout << norm_max(mat, colwise) << "\n"; std::cout << "The l-infinity norm of all elements is: "; std::cout << norm_max(mat) << "\n";
Output:
The l-infinity norm of the elements in each col is [ 5 5 8 ] The l-infinity norm of all elements is: 8
Complexity: Linear in
expr.size()
- Parameters:
expr – [in] matrix, vector or expression
axis – [in] either
no_axis
(default),rowwise
orcolwise
(optional)
- Returns:
the resulting scalar if
no_axis
. A expression containing the partial reduction over the specified axis, otherwise.
Partial Reduction¶
-
template<typename Expr, typename ReduxOp, internal::Axis ReduxAxis>
class PartialRedux : public mocca::MatrixBase<PartialRedux<Expr, ReduxOp, ReduxAxis>>¶ An abstract object representing the partial reduction (i.e., the reduction of the elements in a single row or column) of a given matrix.
In most cases, this object only purpose is to hold the operation until it is evaluated. Therefore, you typically do not need to use this class explicitly.
Template Parameters:
Expr
- A matrix or expressionReduxOp
- Functor with the reduction operationReduxAxis
- Axis of the partial reduction operation (eitherkRowwise
orkColwise
)
Public Functions
-
inline constexpr index_t rows() const noexcept¶
Complexity: Constant
- Returns:
the number of rows in the PartialRedux
-
inline constexpr index_t cols() const noexcept¶
Complexity: Constant
- Returns:
the number of columns in the PartialRedux
-
inline constexpr index_t size() const noexcept¶
Complexity: Constant
- Returns:
the number of entries in the PartialRedux