Re: [eigen] Fast method for computing Gramian Matrix

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


with a copy:

C = B.selfadjointView<Upper>();

or in-place using triangularView as a writing mask:

B.triangularView<StrictlyLower>() = B.adjoint();

cheers,
gael

On Fri, Mar 30, 2012 at 12:18 AM, Mark Borgerding <mark@xxxxxxxxxxxxxx> wrote:
> On 03/29/2012 01:18 AM, Douglas Bates wrote:
>>
>> On Thu, Mar 29, 2012 at 3:50 AM, Mark Borgerding<mark@xxxxxxxxxxxxxx>
>>  wrote:
>>>
>>> (sorry for hitting send too soon)
>>>
>>> http://en.wikipedia.org/wiki/Gramian_matrix
>>>
>>> What is the fastest way to compute MM' when M is wide?
>>> The diagonal elements are the norm-squared of the rows of M. The result
>>> is
>>> Hermitian.
>>>
>>> Is there an optimized method in Eigen or otherwise?
>>
>> I have used the rankUpdate method for a selfadjoint view to calculate
>> this.  I assume that it is an efficient way to calculate the result
>> but I haven't done any timings.
>>
>>
>> MatrixXcd MMt(M.rows(), M.rows();
>> MMt.setZero().selfadjointView<Eigen::Upper>().rankUpdate(M);
>>
> Thanks.  That cut the time to about 80% of the full matrix product.
>
> Is there an elegant way to recover the full, square self-adjoint matrix from
> a SelfAdjointView ?
> I've been adding the SA view to its own adjoint and then subtracting the
> original diagonal.
>
>
>



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