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

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


2009/6/24 Gael Guennebaud <gael.guennebaud@xxxxxxxxx>:
> 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.

Yes, your problem was that you copied the Map object into a VectorXd.
While the Map object stays in sync with 'data', on the other hand, D
is just a separate copy, not a Map!!

Benoit



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