Re: [eigen] Inconsistency in multiplication of complex with real
• To: eigen@xxxxxxxxxxxxxxxxxxx
• Subject: Re: [eigen] Inconsistency in multiplication of complex with real
• From: Gael Guennebaud <gael.guennebaud@xxxxxxxxx>
• Date: Sat, 19 Jun 2010 22:39:46 +0200
• Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :content-type:content-transfer-encoding; b=b7IGyHKnIVYEN2fO0JkB9v0NXR2ZC3O5dB+8HiEqAoyZb3eLgEG0Eg4OnvBdq56NgY iyM8GsTCx/EAPbB9QMIJa9g9maH83WOU4T9YiWjDecMrmvcCwl+SXhnsBt/Gx2ibrygW Qpy59vR263D17VKvLGrGmCKxRTBC11TUbAtTE=

well, there is a difference, for arrays operator * means coefficient
wise product, while for matrices its the matrix product. Of course
matrix product between real and complex should also be allowed, but
implementation-wise this much more tricky....

gael

On Sat, Jun 19, 2010 at 10:26 PM, Benoit Jacob <jacob.benoit.1@xxxxxxxxx> wrote:
> no good reason: Array vs Matrix shouldn't make any difference here.
>
> 2010/6/19 Manoj Rajagopalan <rmanoj@xxxxxxxxx>:
>>
>> Is there any reason why this type-promotion should work with Array but not
>> Matrix? The short program below doesn't compile till I explicitly cast the
>> MatrixXd to complex:
>>
>> int main(void)
>> {
>>        int const N = 5;
>>        Eigen::MatrixXcd A(N,N);
>>        Eigen::MatrixXd B(N,N);
>>        Eigen::MatrixXcd C(N,N);
>>        A.setRandom();
>>        B.setRandom();
>>        C = A*B.cast<complex<double> >(); // compile fail without cast
>>        return 0;
>> }
>>
>>
>>
>> Thanks,
>> Manoj
>>
>>
>>
>> On Saturday 19 June 2010 01:06:59 pm Benoit Jacob wrote:
>>> right, this is  a bug, needs to be fixed.
>>>
>>> 2010/6/19 Johan Pauwels <johan.pauwels@xxxxxxxxxxxxx>:
>>> > Hello all,
>>> >
>>> > I think I found a little inconsistency when multiplying a complex with a
>>> > real array. See the snippet below
>>> >
>>> > #include <iostream>
>>> > #include <Eigen/Core>
>>> >
>>> > int main()
>>> > {
>>> >        Eigen::ArrayXcd complexArray = Eigen::ArrayXcd::Random(5);
>>> >        Eigen::ArrayXd realArray = Eigen::ArrayXd::Random(5);
>>> >        complexArray = complexArray * realArray;
>>> >        std::cout << complexArray << std::endl;
>>> >        complexArray *= realArray;
>>> >        std::cout << complexArray << std::endl;
>>> > }
>>> >
>>> > The first multiplication just works, but the second causes
>>> > 'YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MA
>>> >TRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY' at compilation (Mac OS 10.6..3 -
>>> > gcc 4.2.1, Eigen head). You would expect them to do the same, no?
>>> >
>>> > Regards,
>>> > Johan
>>
>>
>>
>>
>
>
>

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