10 #ifndef EIGEN_SPARSE_DIAGONAL_PRODUCT_H 11 #define EIGEN_SPARSE_DIAGONAL_PRODUCT_H 29 template<
typename Lhs,
typename Rhs>
37 typedef Sparse StorageKind;
40 RowsAtCompileTime = _Lhs::RowsAtCompileTime,
41 ColsAtCompileTime = _Rhs::ColsAtCompileTime,
43 MaxRowsAtCompileTime = _Lhs::MaxRowsAtCompileTime,
44 MaxColsAtCompileTime = _Rhs::MaxColsAtCompileTime,
52 enum {SDP_IsDiagonal, SDP_IsSparseRowMajor, SDP_IsSparseColMajor};
53 template<
typename Lhs,
typename Rhs,
typename SparseDiagonalProductType,
int RhsMode,
int LhsMode>
58 template<
typename Lhs,
typename Rhs>
63 typedef typename Lhs::Nested LhsNested;
64 typedef typename Rhs::Nested RhsNested;
71 : (_LhsNested::Flags&
RowMajorBit) ? internal::SDP_IsSparseRowMajor : internal::SDP_IsSparseColMajor,
73 : (_RhsNested::Flags&
RowMajorBit) ? internal::SDP_IsSparseRowMajor : internal::SDP_IsSparseColMajor
85 class ReverseInnerIterator;
87 EIGEN_STRONG_INLINE SparseDiagonalProduct(
const Lhs& lhs,
const Rhs& rhs)
88 : m_lhs(lhs), m_rhs(rhs)
90 eigen_assert(lhs.cols() == rhs.rows() &&
"invalid sparse matrix * diagonal matrix product");
93 EIGEN_STRONG_INLINE Index rows()
const {
return m_lhs.rows(); }
94 EIGEN_STRONG_INLINE Index cols()
const {
return m_rhs.cols(); }
96 EIGEN_STRONG_INLINE
const _LhsNested& lhs()
const {
return m_lhs; }
97 EIGEN_STRONG_INLINE
const _RhsNested& rhs()
const {
return m_rhs; }
106 template<
typename Lhs,
typename Rhs,
typename SparseDiagonalProductType>
108 <Lhs,Rhs,SparseDiagonalProductType,SDP_IsDiagonal,SDP_IsSparseRowMajor>
112 typedef typename Lhs::Index Index;
115 const SparseDiagonalProductType& expr, Index outer)
116 : Base(expr.rhs()*(expr.lhs().diagonal().coeff(outer)), outer)
120 template<
typename Lhs,
typename Rhs,
typename SparseDiagonalProductType>
122 <Lhs,Rhs,SparseDiagonalProductType,SDP_IsDiagonal,SDP_IsSparseColMajor>
124 scalar_product_op<typename Lhs::Scalar>,
125 const typename Rhs::ConstInnerVectorReturnType,
130 const typename Rhs::ConstInnerVectorReturnType,
132 typedef typename Lhs::Index Index;
136 const SparseDiagonalProductType& expr, Index outer)
137 : Base(expr.rhs().innerVector(outer) .cwiseProduct(expr.lhs().diagonal()), 0), m_outer(outer)
140 inline Index outer()
const {
return m_outer; }
141 inline Index col()
const {
return m_outer; }
144 template<
typename Lhs,
typename Rhs,
typename SparseDiagonalProductType>
146 <Lhs,Rhs,SparseDiagonalProductType,SDP_IsSparseColMajor,SDP_IsDiagonal>
150 typedef typename Lhs::Index Index;
153 const SparseDiagonalProductType& expr, Index outer)
154 : Base(expr.lhs()*expr.rhs().diagonal().coeff(outer), outer)
158 template<
typename Lhs,
typename Rhs,
typename SparseDiagonalProductType>
160 <Lhs,Rhs,SparseDiagonalProductType,SDP_IsSparseRowMajor,SDP_IsDiagonal>
162 scalar_product_op<typename Rhs::Scalar>,
163 const typename Lhs::ConstInnerVectorReturnType,
164 const Transpose<const typename Rhs::DiagonalVectorType> >
::InnerIterator 168 const typename Lhs::ConstInnerVectorReturnType,
170 typedef typename Lhs::Index Index;
174 const SparseDiagonalProductType& expr, Index outer)
175 : Base(expr.lhs().innerVector(outer) .cwiseProduct(expr.rhs().diagonal().transpose()), 0), m_outer(outer)
178 inline Index outer()
const {
return m_outer; }
179 inline Index row()
const {
return m_outer; }
186 template<
typename Derived>
187 template<
typename OtherDerived>
196 #endif // EIGEN_SPARSE_DIAGONAL_PRODUCT_H Definition: gtest_unittest.cc:5031
Expression of the transpose of a matrix.
Definition: Transpose.h:57
iterative scaling algorithm to equilibrate rows and column norms in matrices
Definition: TestIMU_Common.h:87
const unsigned int RowMajorBit
for a matrix, this means that the storage order is row-major.
Definition: Constants.h:53
Definition: XprHelper.h:32
The type used to identify a matrix expression.
Definition: Constants.h:431
Definition: Functors.h:47
Generic expression where a coefficient-wise binary operator is applied to two expressions.
Definition: CwiseBinaryOp.h:107
Base class of any sparse matrices or sparse expressions.
Definition: ForwardDeclarations.h:239
Definition: BandTriangularSolver.h:13
An InnerIterator allows to loop over the element of a sparse (or dense) matrix or expression...
Definition: DiagonalMatrix.h:18
Definition: SparseDiagonalProduct.h:59
const int Dynamic
This value means that a positive quantity (e.g., a size) is not known at compile-time, and that instead the value is stored in some runtime variable.
Definition: Constants.h:21
Definition: SparseDiagonalProduct.h:54
Generic expression where a coefficient-wise unary operator is applied to an expression.
Definition: CwiseUnaryOp.h:59
Definition: ForwardDeclarations.h:17
double Scalar
Common scalar type.
Definition: FlexibleKalmanBase.h:48