Re: [eigen] is MAP oneway ? (urgent)

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]


On Wed, Jun 24, 2009 at 2:13 PM, Helmut
Jarausch<jarausch@xxxxxxxxxxxxxxxxxxx> wrote:
> Hi,
>
> I have to write a function which is called by code which is
> written in C-style (though compiled with g++).
> It delivers me data in a C-array  (double*) and expects me
> to modify this.
>
> When I tried the following example, I was a bit surprised.
> So, what does MAP do?
>
>
> #include <iostream>
> using std::cerr;  using std::endl;
> #include <Eigen/Core>
> // import most common Eigen types
> USING_PART_OF_NAMESPACE_EIGEN
>
> int main() {
>  double data[4] = {1, 2, 3, 4};
>
>  VectorXd D = Eigen::Map<VectorXd>(data,4);
>  cerr << "D before : " << D << endl;
>  data[1]= 7;
>  cerr << "D after  : " << D << endl;  // nothing has changed
> }
>
>
> So, do I have to copy all data from D.data() back to data?
>
> Is there something like "overlaying" an Eigen-Vector onto some raw
> C-array?

this is exactly what Map do, however you have to deal with Map object
directly, e.g.

double* c_like_data = whatever;

Eigen::Map<VectorXd> v(c_like_data, size);

then you can use "v" just like any other Eigen matrix/vector:

v *= 10;

is equivalent to:
for (int i=0; i<size; ++i)
 c_like_data[i] *= 10;

gael.



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/