10 #ifndef EIGEN_SPARSEMATRIXBASE_H 11 #define EIGEN_SPARSEMATRIXBASE_H 41 template<
typename OtherDerived>
96 #ifndef EIGEN_PARSED_BY_DOXYGEN
111 #ifndef EIGEN_PARSED_BY_DOXYGEN 131 inline const Derived&
derived()
const {
return *
static_cast<const Derived*
>(
this); }
132 inline Derived&
derived() {
return *
static_cast<Derived*
>(
this); }
135 #endif // not EIGEN_PARSED_BY_DOXYGEN 137 #define EIGEN_CURRENT_STORAGE_BASE_CLASS Eigen::SparseMatrixBase 138 # include "../plugins/CommonCwiseUnaryOps.h" 139 # include "../plugins/CommonCwiseBinaryOps.h" 140 # include "../plugins/MatrixCwiseUnaryOps.h" 141 # include "../plugins/MatrixCwiseBinaryOps.h" 142 # include "../plugins/BlockMethods.h" 143 # ifdef EIGEN_SPARSEMATRIXBASE_PLUGIN 144 # include EIGEN_SPARSEMATRIXBASE_PLUGIN 146 # undef EIGEN_CURRENT_STORAGE_BASE_CLASS 147 #undef EIGEN_CURRENT_STORAGE_BASE_CLASS 177 template<
typename OtherDerived>
185 template<
typename OtherDerived>
196 return assign(other.derived());
201 template<
typename OtherDerived>
202 inline Derived&
assign(
const OtherDerived& other)
206 if ((!transpose) && other.isRValue())
209 derived().resize(other.rows(), other.cols());
215 for (
typename OtherDerived::InnerIterator it(other, j); it; ++it)
217 Scalar
v = it.value();
218 derived().insertBackByOuterInner(j,it.index()) = v;
230 template<
typename OtherDerived>
235 (!((
Flags & RowMajorBit) != (OtherDerived::Flags & RowMajorBit)))) &&
236 "the transpose operation is supposed to be handled in SparseMatrix::operator=");
240 const Index outerSize = other.outerSize();
243 Derived temp(other.rows(), other.cols());
245 temp.reserve((std::max)(this->
rows(),this->
cols())*2);
249 for (
typename OtherDerived::InnerIterator it(other.derived(), j); it; ++it)
251 Scalar
v = it.value();
252 temp.insertBackByOuterInner(Flip?it.index():j,Flip?j:it.index()) = v;
257 derived() = temp.markAsRValue();
262 template<
typename Lhs,
typename Rhs>
267 typedef typename Derived::Nested Nested;
270 if (
Flags&RowMajorBit)
273 for (Index
row=0;
row<nm.outerSize(); ++
row)
276 for (
typename NestedCleaned::InnerIterator it(nm.derived(),
row); it; ++it)
278 for ( ; col<it.index(); ++
col)
280 s << it.value() <<
" ";
293 for (
typename NestedCleaned::InnerIterator it(nm.derived(), 0); it; ++it)
295 for ( ; row<it.index(); ++
row)
296 s <<
"0" << std::endl;
297 s << it.value() << std::endl;
301 s <<
"0" << std::endl;
306 s << static_cast<const SparseMatrixBase<SparseMatrix<Scalar, RowMajorBit> >&>(trans);
312 template<
typename OtherDerived>
314 template<
typename OtherDerived>
320 #define EIGEN_SPARSE_CWISE_PRODUCT_RETURN_TYPE \ 322 internal::scalar_product_op< \ 323 typename internal::scalar_product_traits< \ 324 typename internal::traits<Derived>::Scalar, \ 325 typename internal::traits<OtherDerived>::Scalar \ 332 template<
typename OtherDerived>
337 template<
typename OtherDerived>
342 template<
typename OtherDerived>
347 template<
typename OtherDerived>
friend 353 template<
typename OtherDerived>
friend 359 template<
typename OtherDerived>
369 template<
typename OtherDerived>
372 #ifdef EIGEN2_SUPPORT 374 template<
typename OtherDerived>
379 template<
typename OtherDerived>
381 #endif // EIGEN2_SUPPORT 392 RealScalar
norm()
const;
403 const ConstInnerVectorReturnType
innerVector(Index outer)
const;
410 template<
typename DenseDerived>
415 for (
typename Derived::InnerIterator i(
derived(),j); i; ++i)
416 dst.coeffRef(i.row(),i.col()) = i.
value();
424 template<
typename OtherDerived>
429 template<
typename OtherDerived>
432 {
return toDense().isApprox(other,prec); }
451 #endif // EIGEN_SPARSEMATRIXBASE_H Generic expression of a matrix where all coefficients are defined by a functor.
RealScalar squaredNorm() const
Block< Derived, Dynamic, Dynamic, true > innerVectors(Index outerStart, Index outerSize)
const int OuterRandomAccessPattern
const AdjointReturnType adjoint() const
Block< const Derived, IsRowMajor?1:Dynamic, IsRowMajor?Dynamic:1, true > ConstInnerVectorReturnType
EIGEN_STRONG_INLINE const EIGEN_SPARSE_CWISE_PRODUCT_RETURN_TYPE cwiseProduct(const MatrixBase< OtherDerived > &other) const
friend std::ostream & operator<<(std::ostream &s, const SparseMatrixBase &m)
friend const DenseSparseProductReturnType< OtherDerived, Derived >::Type operator*(const MatrixBase< OtherDerived > &lhs, const Derived &rhs)
#define EIGEN_STRONG_INLINE
internal::traits< Derived >::StorageKind StorageKind
SparseMatrixBase StorageBaseType
RealScalar blueNorm() const
A versatible sparse matrix representation.
const SparseSelfAdjointView< Derived, UpLo > selfadjointView() const
internal::packet_traits< Scalar >::type PacketScalar
Derived & operator=(const Derived &other)
Expression of the transpose of a matrix.
const unsigned int DirectAccessBit
CwiseNullaryOp< internal::scalar_constant_op< Scalar >, Matrix< Scalar, Dynamic, Dynamic > > ConstantReturnType
Derived & operator+=(const SparseMatrixBase< OtherDerived > &other)
iterative scaling algorithm to equilibrate rows and column norms in matrices
Pseudo expression to manipulate a triangular sparse matrix as a selfadjoint matrix.
void evalTo(MatrixBase< DenseDerived > &dst) const
Holds information about the various numeric (i.e. scalar) types allowed by Eigen. ...
Scalar dot(const MatrixBase< OtherDerived > &other) const
Block< Derived, IsRowMajor?1:Dynamic, IsRowMajor?Dynamic:1, true > InnerVectorReturnType
const unsigned int RowMajorBit
internal::conditional< NumTraits< Scalar >::IsComplex, CwiseUnaryOp< internal::scalar_conjugate_op< Scalar >, Eigen::Transpose< const Derived > >, Transpose< const Derived > >::type AdjointReturnType
Matrix< Scalar, RowsAtCompileTime, ColsAtCompileTime > toDense() const
SparseSymmetricPermutationProduct< Derived, Upper|Lower > twistedBy(const PermutationMatrix< Dynamic, Dynamic, Index > &perm) const
Derived & operator=(const EigenBase< OtherDerived > &other)
SparseMatrix< Scalar, Flags &RowMajorBit?RowMajor:ColMajor, Index > PlainObject
friend const SparseDiagonalProduct< OtherDerived, Derived > operator*(const DiagonalBase< OtherDerived > &lhs, const SparseMatrixBase &rhs)
Base class of any sparse matrices or sparse expressions.
const SparseTriangularView< Derived, Mode > triangularView() const
Derived & operator=(const SparseMatrixBase< OtherDerived > &other)
internal::traits< Derived >::Scalar Scalar
const internal::eval< Derived >::type eval() const
CoeffReturnType value() const
InnerVectorReturnType innerVector(Index outer)
DenseTimeSparseProduct< Lhs, Rhs > Type
const ScalarMultipleReturnType operator*(const Scalar &scalar) const
Transpose< Derived > transpose()
Derived & assign(const OtherDerived &other)
bool isApprox(const SparseMatrixBase< OtherDerived > &other, const RealScalar &prec=NumTraits< Scalar >::dummy_precision()) const
#define EIGEN_SPARSE_CWISE_PRODUCT_RETURN_TYPE
const Transpose< const Derived > transpose() const
void rhs(const real_t *x, real_t *f)
#define EIGEN_SIZE_MAX(a, b)
Expression of a fixed-size or dynamic-size block.
EigenBase< Derived > Base
Derived & operator*=(const Scalar &other)
const Derived & derived() const
Derived & operator/=(const Scalar &other)
Derived & operator-=(const SparseMatrixBase< OtherDerived > &other)
internal::conditional< _HasDirectAccess, const Scalar &, Scalar >::type CoeffReturnType
void assignGeneric(const OtherDerived &other)
Matrix< Scalar, EIGEN_SIZE_MAX(RowsAtCompileTime, ColsAtCompileTime), EIGEN_SIZE_MAX(RowsAtCompileTime, ColsAtCompileTime)> SquareMatrixType
const Derived & derived() const
Generic expression where a coefficient-wise unary operator is applied to an expression.
bool isApprox(const MatrixBase< OtherDerived > &other, const RealScalar &prec=NumTraits< Scalar >::dummy_precision()) const
NumTraits< Scalar >::Real RealScalar
internal::add_const_on_value_type_if_arithmetic< typename internal::packet_traits< Scalar >::type >::type PacketReturnType
void evalTo(Dest &dst) const
Base class for all dense matrices, vectors, and expressions.
internal::traits< Derived >::Index Index
Derived & const_cast_derived() const