Sleipnir C++ API
Loading...
Searching...
No Matches
sparse_inf_norms.hpp
1// Copyright (c) Sleipnir contributors
2
3#pragma once
4
5#include <algorithm>
6
7#include <Eigen/Core>
8#include <Eigen/SparseCore>
9
10namespace slp {
11
17template <typename Derived>
18auto sparse_inf_norms(const Eigen::SparseCompressedBase<Derived>& mat)
19 -> Eigen::Vector<typename Derived::Scalar, Eigen::Dynamic> {
20 using Scalar = typename Derived::Scalar;
21 using DenseVector = Eigen::Vector<Scalar, Eigen::Dynamic>;
22
23 DenseVector norms = DenseVector::Zero(mat.rows());
24 for (int k = 0; k < mat.outerSize(); ++k) {
25 for (typename Derived::InnerIterator it{mat, k}; it; ++it) {
26 using std::abs;
27 norms[it.row()] = std::max(norms[it.row()], abs(it.value()));
28 }
29 }
30
31 return norms;
32}
33
34} // namespace slp