11#ifndef EIGEN_SPARSE_DOT_H
12#define EIGEN_SPARSE_DOT_H
15#include "./InternalHeaderCheck.h"
19template <
typename Derived>
20template <
typename OtherDerived>
21inline typename internal::traits<Derived>::Scalar SparseMatrixBase<Derived>::dot(
23 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
24 EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
25 EIGEN_STATIC_ASSERT_SAME_VECTOR_SIZE(Derived, OtherDerived)
27 (std::is_same<Scalar, typename OtherDerived::Scalar>::value),
28 YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY)
30 eigen_assert(size() == other.size());
31 eigen_assert(other.size() > 0 &&
"you are using a non initialized vector");
33 internal::evaluator<Derived> thisEval(derived());
34 typename internal::evaluator<Derived>::InnerIterator i(thisEval, 0);
40 res1 = numext::madd<Scalar>(numext::conj(i.value()), other.coeff(i.index()), res1);
43 res2 = numext::madd<Scalar>(numext::conj(i.value()), other.coeff(i.index()), res2);
49template <
typename Derived>
50template <
typename OtherDerived>
51inline typename internal::traits<Derived>::Scalar SparseMatrixBase<Derived>::dot(
53 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
54 EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
55 EIGEN_STATIC_ASSERT_SAME_VECTOR_SIZE(Derived, OtherDerived)
57 (std::is_same<Scalar, typename OtherDerived::Scalar>::value),
58 YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY)
60 eigen_assert(size() == other.size());
62 internal::evaluator<Derived> thisEval(derived());
63 typename internal::evaluator<Derived>::InnerIterator i(thisEval, 0);
65 internal::evaluator<OtherDerived> otherEval(other.derived());
66 typename internal::evaluator<OtherDerived>::InnerIterator j(otherEval, 0);
70 if (i.index() == j.index()) {
71 res = numext::madd<Scalar>(numext::conj(i.value()), j.value(), res);
74 }
else if (i.index() < j.index())
82template <
typename Derived>
85 return numext::real((*this).cwiseAbs2().sum());
88template <
typename Derived>
91 return sqrt(squaredNorm());
94template <
typename Derived>
97 return internal::blueNorm_impl(*
this);
Base class for all dense matrices, vectors, and expressions.
Definition MatrixBase.h:53
Base class of any sparse matrices or sparse expressions.
Definition SparseMatrixBase.h:31
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition NumTraits.h:233