Re: [eigen] Coercion of matrices with mixed types ?

[ Thread Index | Date Index | More Archives ]

Firstly, I want to thank everyone for their explanations.  Also, I wish to explain why this is an issue for me, and how I have solved it.  Referring to the same two types, double and OTHER_TYPE, the difference of the two scalars is also of type OTHER_TYPE.  This is a  type of some complexity, so it would be inefficient to cast a vector<double> to be vector<OTHER_TYPE>.  Instead, I have written my own  (very simple)

  vector<OTHER_TYPE> operator-(const  vector<double>&, const vector<OTHER_TYPE>& )

and this has resolved the issue for me (I also needed to augment some of the Eigen Traits, etc).

Another aspect to this is that I do not want to include casting as a matter of course into my source code, for two reasons:
-- The code is harder to read/write and resembles less the mathematics that it is implementing, and
-- As a coding practice, explicit casting is frowned upon.

I know very little about meta programming, so the solution I have outlined can probably be done in a better, or more efficient way, with guidelines from the Eigen experts.

Thanks, again!

On 04.08.2012 16:52, Brad Bell wrote:
It appears that Eigen will not coerce matrices, even if the scalar type
does. Is this a design decision or am I missing something ?
It's a design decision.


int main(void)
{    typedef Eigen::Matrix<     double, Eigen::Dynamic, 1  > d_vector;
      typedef Eigen::Matrix< OTHER_TYPE, Eigen::Dynamic, 1  > other_vector;

      size_t n = 10;
      other_vector  u(n);
      d_vector  v(n), w(n);
      w = v - u;
You need to cast u to double here:
	w = v - u.cast<double>();

Be aware that in some cases you need to write
	u.template cast<double>(),
not in this case, though. See here:


Dipl.-Inf. Christoph Hertzberg
Cartesium 0.049
Universität Bremen
Enrique-Schmidt-Straße 5
28359 Bremen

Tel: +49 (421) 218-64252

Mail converted by MHonArc 2.6.19+