Base class for all 1D and 2D array, and related expressions. More...
Public Member Functions | |
const CwiseUnaryOp < internal::scalar_abs_op < Scalar >, const Derived > | abs () const |
const CwiseUnaryOp < internal::scalar_abs2_op < Scalar >, const Derived > | abs2 () const |
const CwiseUnaryOp < internal::scalar_acos_op < Scalar >, const Derived > | acos () const |
const CwiseUnaryOp < internal::scalar_asin_op < Scalar >, const Derived > | asin () const |
template<typename CustomBinaryOp , typename OtherDerived > | |
const CwiseBinaryOp < CustomBinaryOp, const Derived, const OtherDerived > | binaryExpr (const Eigen::ArrayBase< OtherDerived > &other, const CustomBinaryOp &func=CustomBinaryOp()) const |
template<typename NewType > | |
internal::cast_return_type < Derived, const CwiseUnaryOp < internal::scalar_cast_op < typename internal::traits < Derived >::Scalar, NewType > , const Derived > >::type | cast () const |
ConjugateReturnType | conjugate () const |
const CwiseUnaryOp < internal::scalar_cos_op < Scalar >, const Derived > | cos () const |
const CwiseUnaryOp < internal::scalar_cube_op < Scalar >, const Derived > | cube () const |
const CwiseUnaryOp < internal::scalar_abs_op < Scalar >, const Derived > | cwiseAbs () const |
const CwiseUnaryOp < internal::scalar_abs2_op < Scalar >, const Derived > | cwiseAbs2 () const |
template<typename OtherDerived > | |
const | CwiseBinaryOp (min)(const Eigen |
template<typename OtherDerived > | |
const | CwiseBinaryOp (operator-)(const Eigen |
template<typename OtherDerived > | |
const | CwiseBinaryOp (max)(const Eigen |
template<typename OtherDerived > | |
const | CwiseBinaryOp (operator+)(const Eigen |
template<typename OtherDerived > | |
const | CwiseBinaryOp (operator<)(const Eigen |
template<typename OtherDerived > | |
const | CwiseBinaryOp (operator<=)(const Eigen |
template<typename OtherDerived > | |
const | CwiseBinaryOp (operator>)(const Eigen |
template<typename OtherDerived > | |
const | CwiseBinaryOp (operator>=)(const Eigen |
template<typename OtherDerived > | |
const | CwiseBinaryOp (operator==)(const Eigen |
template<typename OtherDerived > | |
const | CwiseBinaryOp (operator!=)(const Eigen |
template<typename OtherDerived > | |
const CwiseBinaryOp < std::equal_to< Scalar > , const Derived, const OtherDerived > | cwiseEqual (const Eigen::ArrayBase< OtherDerived > &other) const |
const CwiseUnaryOp < std::binder1st < std::equal_to< Scalar > >, const Derived > | cwiseEqual (const Scalar &s) const |
const CwiseUnaryOp < internal::scalar_inverse_op < Scalar >, const Derived > | cwiseInverse () const |
template<typename OtherDerived > | |
const CwiseBinaryOp < internal::scalar_max_op < Scalar >, const Derived, const OtherDerived > | cwiseMax (const Eigen::ArrayBase< OtherDerived > &other) const |
template<typename OtherDerived > | |
const CwiseBinaryOp < internal::scalar_min_op < Scalar >, const Derived, const OtherDerived > | cwiseMin (const Eigen::ArrayBase< OtherDerived > &other) const |
template<typename OtherDerived > | |
const CwiseBinaryOp < std::not_equal_to< Scalar > , const Derived, const OtherDerived > | cwiseNotEqual (const Eigen::ArrayBase< OtherDerived > &other) const |
template<typename OtherDerived > | |
const CwiseBinaryOp < internal::scalar_product_op < typename internal::traits < Derived >::Scalar, typename internal::traits< OtherDerived > ::Scalar >, const Derived, const OtherDerived > | cwiseProduct (const Eigen::ArrayBase< OtherDerived > &other) const |
template<typename OtherDerived > | |
const CwiseBinaryOp < internal::scalar_quotient_op < Scalar >, const Derived, const OtherDerived > | cwiseQuotient (const Eigen::ArrayBase< OtherDerived > &other) const |
const CwiseUnaryOp < internal::scalar_sqrt_op < Scalar >, const Derived > | cwiseSqrt () const |
const CwiseUnaryOp < internal::scalar_exp_op < Scalar >, const Derived > | exp () const |
const ImagReturnType | imag () const |
NonConstImagReturnType | imag () |
const CwiseUnaryOp < internal::scalar_inverse_op < Scalar >, const Derived > | inverse () const |
const CwiseUnaryOp < internal::scalar_log_op < Scalar >, const Derived > | log () const |
MatrixWrapper< Derived > | matrix () |
template<typename OtherDerived > | |
const CwiseBinaryOp < internal::scalar_product_op < typename internal::traits < Derived >::Scalar, typename internal::traits< OtherDerived > ::Scalar >, const Derived, const OtherDerived > | operator* (const Eigen::ArrayBase< OtherDerived > &other) const |
const ScalarMultipleReturnType | operator* (const Scalar &scalar) const |
const CwiseUnaryOp < internal::scalar_multiple2_op < Scalar, std::complex< Scalar > >, const Derived > | operator* (const std::complex< Scalar > &scalar) const |
template<typename OtherDerived > | |
Derived & | operator*= (const ArrayBase< OtherDerived > &other) |
const CwiseUnaryOp < internal::scalar_add_op < Scalar >, const Derived > | operator+ (const Scalar &scalar) const |
template<typename OtherDerived > | |
Derived & | operator+= (const ArrayBase< OtherDerived > &other) |
const CwiseUnaryOp < internal::scalar_opposite_op < typename internal::traits < Derived >::Scalar >, const Derived > | operator- () const |
const CwiseUnaryOp < internal::scalar_add_op < Scalar >, const Derived > | operator- (const Scalar &scalar) const |
template<typename OtherDerived > | |
Derived & | operator-= (const ArrayBase< OtherDerived > &other) |
template<typename OtherDerived > | |
const CwiseBinaryOp < internal::scalar_quotient_op < Scalar >, const Derived, const OtherDerived > | operator/ (const Eigen::ArrayBase< OtherDerived > &other) const |
const CwiseUnaryOp < internal::scalar_quotient1_op < typename internal::traits < Derived >::Scalar >, const Derived > | operator/ (const Scalar &scalar) const |
template<typename OtherDerived > | |
Derived & | operator/= (const ArrayBase< OtherDerived > &other) |
Derived & | operator= (const ArrayBase &other) |
const CwiseUnaryOp < internal::scalar_pow_op < Scalar >, const Derived > | pow (const Scalar &exponent) const |
RealReturnType | real () const |
NonConstRealReturnType | real () |
const CwiseUnaryOp < internal::scalar_sin_op < Scalar >, const Derived > | sin () const |
const CwiseUnaryOp < internal::scalar_sqrt_op < Scalar >, const Derived > | sqrt () const |
const CwiseUnaryOp < internal::scalar_square_op < Scalar >, const Derived > | square () const |
const CwiseUnaryOp < internal::scalar_tan_op < Scalar >, Derived > | tan () const |
template<typename CustomUnaryOp > | |
const CwiseUnaryOp < CustomUnaryOp, const Derived > | unaryExpr (const CustomUnaryOp &func=CustomUnaryOp()) const |
Apply a unary operator coefficient-wise. | |
template<typename CustomViewOp > | |
const CwiseUnaryView < CustomViewOp, const Derived > | unaryViewExpr (const CustomViewOp &func=CustomViewOp()) const |
Base class for all 1D and 2D array, and related expressions.
An array is similar to a dense vector or matrix. While matrices are mathematical objects with well defined linear algebra operators, an array is just a collection of scalar values arranged in a one or two dimensionnal fashion. As the main consequence, all operations applied to an array are performed coefficient wise. Furthermore, arrays support scalar math functions of the c++ standard library (e.g., std::sin(x)), and convenient constructors allowing to easily write generic code working for both scalar values and arrays.
This class is the base that is inherited by all array expression types.
Derived | is the derived type, e.g., an array or an expression type. |
This class can be extended with the help of the plugin mechanism described on the page Customizing/Extending Eigen by defining the preprocessor symbol EIGEN_ARRAYBASE_PLUGIN
.
const CwiseUnaryOp<internal::scalar_abs_op<Scalar>, const Derived> abs | ( | ) | const [inline] |
*this
Example:
Array3d v(1,-2,-3); cout << v.abs() << endl;
Output:
1 2 3
const CwiseUnaryOp<internal::scalar_abs2_op<Scalar>, const Derived> abs2 | ( | ) | const [inline] |
const CwiseUnaryOp<internal::scalar_acos_op<Scalar>, const Derived> acos | ( | ) | const [inline] |
const CwiseUnaryOp<internal::scalar_asin_op<Scalar>, const Derived> asin | ( | ) | const [inline] |
const CwiseBinaryOp<CustomBinaryOp, const Derived, const OtherDerived> binaryExpr | ( | const Eigen::ArrayBase< OtherDerived > & | other, |
const CustomBinaryOp & | func = CustomBinaryOp() |
||
) | const [inline] |
The template parameter CustomBinaryOp is the type of the functor of the custom operator (see class CwiseBinaryOp for an example)
Here is an example illustrating the use of custom functors:
#include <Eigen/Core> #include <iostream> using namespace Eigen; using namespace std; // define a custom template binary functor template<typename Scalar> struct MakeComplexOp { EIGEN_EMPTY_STRUCT_CTOR(MakeComplexOp) typedef complex<Scalar> result_type; complex<Scalar> operator()(const Scalar& a, const Scalar& b) const { return complex<Scalar>(a,b); } }; int main(int, char**) { Matrix4d m1 = Matrix4d::Random(), m2 = Matrix4d::Random(); cout << m1.binaryExpr(m2, MakeComplexOp<double>()) << endl; return 0; }
Output:
(0.68,0.271) (0.823,-0.967) (-0.444,-0.687) (-0.27,0.998) (-0.211,0.435) (-0.605,-0.514) (0.108,-0.198) (0.0268,-0.563) (0.566,-0.717) (-0.33,-0.726) (-0.0452,-0.74) (0.904,0.0259) (0.597,0.214) (0.536,0.608) (0.258,-0.782) (0.832,0.678)
internal::cast_return_type<Derived,const CwiseUnaryOp<internal::scalar_cast_op<typename internal::traits<Derived>::Scalar, NewType>, const Derived> >::type cast | ( | ) | const [inline] |
The template parameter NewScalar is the type we are casting the scalars to.
ConjugateReturnType conjugate | ( | ) | const [inline] |
*this
.const CwiseUnaryOp<internal::scalar_cos_op<Scalar>, const Derived> cos | ( | ) | const [inline] |
const CwiseUnaryOp<internal::scalar_cube_op<Scalar>, const Derived> cube | ( | ) | const [inline] |
const CwiseUnaryOp<internal::scalar_abs_op<Scalar>, const Derived> cwiseAbs | ( | ) | const [inline] |
*this
Example:
MatrixXd m(2,3); m << 2, -4, 6, -5, 1, 0; cout << m.cwiseAbs() << endl;
Output:
2 4 6 5 1 0
const CwiseUnaryOp<internal::scalar_abs2_op<Scalar>, const Derived> cwiseAbs2 | ( | ) | const [inline] |
*this
Example:
MatrixXd m(2,3); m << 2, -4, 6, -5, 1, 0; cout << m.cwiseAbs2() << endl;
Output:
4 16 36 25 1 0
const CwiseBinaryOp | ( | min | ) | const [inline] |
*this
and other Example:
Array3d v(2,3,4), w(4,2,3); cout << v.min(w) << endl;
Output:
2 2 3
const CwiseBinaryOp | ( | operator- | ) | const [inline] |
*this
and other const CwiseBinaryOp | ( | max | ) | const [inline] |
*this
and other Example:
Array3d v(2,3,4), w(4,2,3); cout << v.max(w) << endl;
Output:
4 3 4
const CwiseBinaryOp | ( | operator+ | ) | const [inline] |
*this
and other const CwiseBinaryOp | ( | ) | const [inline] |
const CwiseBinaryOp | ( | operator<= | ) | const [inline] |
const CwiseBinaryOp | ( | operator | ) | const [inline] |
const CwiseBinaryOp | ( | operator>= | ) | const [inline] |
const CwiseBinaryOp | ( | operator | = = | ) | const [inline] |
Example:
Array3d v(1,2,3), w(3,2,1); cout << (v==w) << endl;
Output:
0 1 0
const CwiseBinaryOp | ( | operator! | ) | const [inline] |
Example:
Array3d v(1,2,3), w(3,2,1); cout << (v!=w) << endl;
Output:
1 0 1
const CwiseBinaryOp<std::equal_to<Scalar>, const Derived, const OtherDerived> cwiseEqual | ( | const Eigen::ArrayBase< OtherDerived > & | other | ) | const [inline] |
Example:
MatrixXi m(2,2); m << 1, 0, 1, 1; cout << "Comparing m with identity matrix:" << endl; cout << m.cwiseEqual(MatrixXi::Identity(2,2)) << endl; int count = m.cwiseEqual(MatrixXi::Identity(2,2)).count(); cout << "Number of coefficients that are equal: " << count << endl;
Output:
Comparing m with identity matrix: 1 1 0 1 Number of coefficients that are equal: 3
const CwiseUnaryOp<std::binder1st<std::equal_to<Scalar> >, const Derived> cwiseEqual | ( | const Scalar & | s | ) | const [inline] |
*this
and a scalar s const CwiseUnaryOp<internal::scalar_inverse_op<Scalar>, const Derived> cwiseInverse | ( | ) | const [inline] |
Example:
MatrixXd m(2,3); m << 2, 0.5, 1, 3, 0.25, 1; cout << m.cwiseInverse() << endl;
Output:
0.5 2 1 0.333 4 1
const CwiseBinaryOp<internal::scalar_max_op<Scalar>, const Derived, const OtherDerived> cwiseMax | ( | const Eigen::ArrayBase< OtherDerived > & | other | ) | const [inline] |
Example:
Vector3d v(2,3,4), w(4,2,3); cout << v.cwiseMax(w) << endl;
Output:
4 3 4
const CwiseBinaryOp<internal::scalar_min_op<Scalar>, const Derived, const OtherDerived> cwiseMin | ( | const Eigen::ArrayBase< OtherDerived > & | other | ) | const [inline] |
Example:
Vector3d v(2,3,4), w(4,2,3); cout << v.cwiseMin(w) << endl;
Output:
2 2 3
const CwiseBinaryOp<std::not_equal_to<Scalar>, const Derived, const OtherDerived> cwiseNotEqual | ( | const Eigen::ArrayBase< OtherDerived > & | other | ) | const [inline] |
Example:
MatrixXi m(2,2); m << 1, 0, 1, 1; cout << "Comparing m with identity matrix:" << endl; cout << m.cwiseNotEqual(MatrixXi::Identity(2,2)) << endl; int count = m.cwiseNotEqual(MatrixXi::Identity(2,2)).count(); cout << "Number of coefficients that are not equal: " << count << endl;
Output:
Comparing m with identity matrix: 0 0 1 0 Number of coefficients that are not equal: 1
const CwiseBinaryOp< internal::scalar_product_op< typename internal::traits< Derived >::Scalar, typename internal::traits< OtherDerived >::Scalar >, const Derived , const OtherDerived > cwiseProduct | ( | const Eigen::ArrayBase< OtherDerived > & | other | ) | const [inline] |
Example:
Matrix3i a = Matrix3i::Random(), b = Matrix3i::Random(); Matrix3i c = a.cwiseProduct(b); cout << "a:\n" << a << "\nb:\n" << b << "\nc:\n" << c << endl;
Output:
a: 7 6 -3 -2 9 6 6 -6 -5 b: 1 -3 9 0 0 3 3 9 5 c: 7 -18 -27 0 0 18 18 -54 -25
const CwiseBinaryOp<internal::scalar_quotient_op<Scalar>, const Derived, const OtherDerived> cwiseQuotient | ( | const Eigen::ArrayBase< OtherDerived > & | other | ) | const [inline] |
Example:
Vector3d v(2,3,4), w(4,2,3); cout << v.cwiseQuotient(w) << endl;
Output:
0.5 1.5 1.33
const CwiseUnaryOp<internal::scalar_sqrt_op<Scalar>, const Derived> cwiseSqrt | ( | ) | const [inline] |
Example:
Vector3d v(1,2,4); cout << v.cwiseSqrt() << endl;
Output:
1 1.41 2
const CwiseUnaryOp<internal::scalar_exp_op<Scalar>, const Derived> exp | ( | ) | const [inline] |
const ImagReturnType imag | ( | ) | const [inline] |
*this
.NonConstImagReturnType imag | ( | ) | [inline] |
*this
.const CwiseUnaryOp<internal::scalar_inverse_op<Scalar>, const Derived> inverse | ( | ) | const [inline] |
Example:
Array3d v(2,3,4); cout << v.inverse() << endl;
Output:
0.5 0.333 0.25
const CwiseUnaryOp<internal::scalar_log_op<Scalar>, const Derived> log | ( | ) | const [inline] |
Example:
Array3d v(1,2,3); cout << v.log() << endl;
Output:
0 0.693 1.1
MatrixWrapper<Derived> matrix | ( | ) | [inline] |
const CwiseBinaryOp< internal::scalar_product_op< typename internal::traits< Derived >::Scalar, typename internal::traits< OtherDerived >::Scalar >, const Derived , const OtherDerived > operator* | ( | const Eigen::ArrayBase< OtherDerived > & | other | ) | const [inline] |
*this
and other const ScalarMultipleReturnType operator* | ( | const Scalar & | scalar | ) | const [inline] |
*this
scaled by the scalar factor scalar const CwiseUnaryOp<internal::scalar_multiple2_op<Scalar,std::complex<Scalar> >, const Derived> operator* | ( | const std::complex< Scalar > & | scalar | ) | const [inline] |
Overloaded for efficient real matrix times complex scalar value
Derived & operator*= | ( | const ArrayBase< OtherDerived > & | other | ) | [inline] |
replaces *this
by *this
* other coefficient wise.
*this
const CwiseUnaryOp<internal::scalar_add_op<Scalar>, const Derived> operator+ | ( | const Scalar & | scalar | ) | const [inline] |
*this
with each coeff incremented by the constant scalar Example:
Array3d v(1,2,3); cout << v+5 << endl;
Output:
6 7 8
Derived & operator+= | ( | const ArrayBase< OtherDerived > & | other | ) | [inline] |
replaces *this
by *this
+ other.
*this
const CwiseUnaryOp<internal::scalar_opposite_op<typename internal::traits<Derived>::Scalar>, const Derived> operator- | ( | ) | const [inline] |
*this
const CwiseUnaryOp<internal::scalar_add_op<Scalar>, const Derived> operator- | ( | const Scalar & | scalar | ) | const [inline] |
*this
with each coeff decremented by the constant scalar Example:
Array3d v(1,2,3); cout << v-5 << endl;
Output:
-4 -3 -2
Derived & operator-= | ( | const ArrayBase< OtherDerived > & | other | ) | [inline] |
replaces *this
by *this
- other.
*this
const CwiseBinaryOp<internal::scalar_quotient_op<Scalar>, const Derived, const OtherDerived> operator/ | ( | const Eigen::ArrayBase< OtherDerived > & | other | ) | const [inline] |
*this
and other const CwiseUnaryOp<internal::scalar_quotient1_op<typename internal::traits<Derived>::Scalar>, const Derived> operator/ | ( | const Scalar & | scalar | ) | const [inline] |
*this
divided by the scalar value scalar Derived & operator/= | ( | const ArrayBase< OtherDerived > & | other | ) | [inline] |
replaces *this
by *this
/ other coefficient wise.
*this
Derived& operator= | ( | const ArrayBase< Derived > & | other | ) | [inline] |
Special case of the template operator=, in order to prevent the compiler from generating a default operator= (issue hit with g++ 4.1)
const CwiseUnaryOp<internal::scalar_pow_op<Scalar>, const Derived> pow | ( | const Scalar & | exponent | ) | const [inline] |
RealReturnType real | ( | ) | const [inline] |
*this
.NonConstRealReturnType real | ( | ) | [inline] |
*this
.const CwiseUnaryOp<internal::scalar_sin_op<Scalar>, const Derived> sin | ( | ) | const [inline] |
const CwiseUnaryOp<internal::scalar_sqrt_op<Scalar>, const Derived> sqrt | ( | ) | const [inline] |
const CwiseUnaryOp<internal::scalar_square_op<Scalar>, const Derived> square | ( | ) | const [inline] |
Example:
Array3d v(2,3,4); cout << v.square() << endl;
Output:
4 9 16
const CwiseUnaryOp<internal::scalar_tan_op<Scalar>, Derived> tan | ( | ) | const [inline] |
const CwiseUnaryOp<CustomUnaryOp, const Derived> unaryExpr | ( | const CustomUnaryOp & | func = CustomUnaryOp() | ) | const [inline] |
Apply a unary operator coefficient-wise.
[in] | func | Functor implementing the unary operator |
CustomUnaryOp | Type of func |
The function ptr_fun()
from the C++ standard library can be used to make functors out of normal functions.
Example:
#include <Eigen/Core> #include <iostream> using namespace Eigen; using namespace std; // define function to be applied coefficient-wise double ramp(double x) { if (x > 0) return x; else return 0; } int main(int, char**) { Matrix4d m1 = Matrix4d::Random(); cout << m1 << endl << "becomes: " << endl << m1.unaryExpr(ptr_fun(ramp)) << endl; return 0; }
Output:
0.68 0.823 -0.444 -0.27 -0.211 -0.605 0.108 0.0268 0.566 -0.33 -0.0452 0.904 0.597 0.536 0.258 0.832 becomes: 0.68 0.823 0 0 0 0 0.108 0.0268 0.566 0 0 0.904 0.597 0.536 0.258 0.832
Genuine functors allow for more possibilities, for instance it may contain a state.
Example:
#include <Eigen/Core> #include <iostream> using namespace Eigen; using namespace std; // define a custom template unary functor template<typename Scalar> struct CwiseClampOp { CwiseClampOp(const Scalar& inf, const Scalar& sup) : m_inf(inf), m_sup(sup) {} const Scalar operator()(const Scalar& x) const { return x<m_inf ? m_inf : (x>m_sup ? m_sup : x); } Scalar m_inf, m_sup; }; int main(int, char**) { Matrix4d m1 = Matrix4d::Random(); cout << m1 << endl << "becomes: " << endl << m1.unaryExpr(CwiseClampOp<double>(-0.5,0.5)) << endl; return 0; }
Output:
0.68 0.823 -0.444 -0.27 -0.211 -0.605 0.108 0.0268 0.566 -0.33 -0.0452 0.904 0.597 0.536 0.258 0.832 becomes: 0.5 0.5 -0.444 -0.27 -0.211 -0.5 0.108 0.0268 0.5 -0.33 -0.0452 0.5 0.5 0.5 0.258 0.5
const CwiseUnaryView<CustomViewOp, const Derived> unaryViewExpr | ( | const CustomViewOp & | func = CustomViewOp() | ) | const [inline] |
The template parameter CustomUnaryOp is the type of the functor of the custom unary operator.
Example:
#include <Eigen/Core> #include <iostream> using namespace Eigen; using namespace std; // define a custom template unary functor template<typename Scalar> struct CwiseClampOp { CwiseClampOp(const Scalar& inf, const Scalar& sup) : m_inf(inf), m_sup(sup) {} const Scalar operator()(const Scalar& x) const { return x<m_inf ? m_inf : (x>m_sup ? m_sup : x); } Scalar m_inf, m_sup; }; int main(int, char**) { Matrix4d m1 = Matrix4d::Random(); cout << m1 << endl << "becomes: " << endl << m1.unaryExpr(CwiseClampOp<double>(-0.5,0.5)) << endl; return 0; }
Output:
0.68 0.823 -0.444 -0.27 -0.211 -0.605 0.108 0.0268 0.566 -0.33 -0.0452 0.904 0.597 0.536 0.258 0.832 becomes: 0.5 0.5 -0.444 -0.27 -0.211 -0.5 0.108 0.0268 0.5 -0.33 -0.0452 0.5 0.5 0.5 0.258 0.5