mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
Provide DiagonalMatrix Product and Initializers
This commit is contained in:
committed by
Rasmus Munk Larsen
parent
76cf6204f3
commit
14aae29470
@@ -65,6 +65,16 @@ class DiagonalBase : public EigenBase<Derived>
|
||||
return Product<Derived, MatrixDerived, LazyProduct>(derived(),matrix.derived());
|
||||
}
|
||||
|
||||
template <typename OtherDerived>
|
||||
using DiagonalProductReturnType = DiagonalWrapper<const EIGEN_CWISE_BINARY_RETURN_TYPE(
|
||||
DiagonalVectorType, typename OtherDerived::DiagonalVectorType, product)>;
|
||||
|
||||
template <typename OtherDerived>
|
||||
EIGEN_DEVICE_FUNC const DiagonalProductReturnType<OtherDerived> operator*(
|
||||
const DiagonalBase<OtherDerived>& other) const {
|
||||
return (diagonal().cwiseProduct(other.diagonal())).asDiagonal();
|
||||
}
|
||||
|
||||
typedef DiagonalWrapper<const CwiseUnaryOp<internal::scalar_inverse_op<Scalar>, const DiagonalVectorType> > InverseReturnType;
|
||||
EIGEN_DEVICE_FUNC
|
||||
inline const InverseReturnType
|
||||
@@ -241,6 +251,22 @@ class DiagonalMatrix
|
||||
}
|
||||
#endif
|
||||
|
||||
typedef DiagonalWrapper<const CwiseNullaryOp<internal::scalar_constant_op<Scalar>, DiagonalVectorType>>
|
||||
InitializeReturnType;
|
||||
|
||||
/** Initializes a diagonal matrix of size SizeAtCompileTime with coefficients set to zero */
|
||||
EIGEN_DEVICE_FUNC
|
||||
static const InitializeReturnType Zero() { return DiagonalVectorType::Zero().asDiagonal(); }
|
||||
/** Initializes a diagonal matrix of size dim with coefficients set to zero */
|
||||
EIGEN_DEVICE_FUNC
|
||||
static const InitializeReturnType Zero(Index size) { return DiagonalVectorType::Zero(size).asDiagonal(); }
|
||||
/** Initializes a identity matrix of size SizeAtCompileTime */
|
||||
EIGEN_DEVICE_FUNC
|
||||
static const InitializeReturnType Identity() { return DiagonalVectorType::Ones().asDiagonal(); }
|
||||
/** Initializes a identity matrix of size dim */
|
||||
EIGEN_DEVICE_FUNC
|
||||
static const InitializeReturnType Identity(Index size) { return DiagonalVectorType::Ones(size).asDiagonal(); }
|
||||
|
||||
/** Resizes to given size. */
|
||||
EIGEN_DEVICE_FUNC
|
||||
inline void resize(Index size) { m_diagonal.resize(size); }
|
||||
|
||||
Reference in New Issue
Block a user