Re: [eigen] Special Matrices: first get diagonal matrices done |

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

*To*: eigen@xxxxxxxxxxxxxxxxxxx*Subject*: Re: [eigen] Special Matrices: first get diagonal matrices done*From*: Gael Guennebaud <gael.guennebaud@xxxxxxxxx>*Date*: Mon, 11 May 2009 21:37:59 +0200*Dkim-signature*: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:content-type :content-transfer-encoding; bh=3k4/TCJx+IqMdQVUxJ/1ZdX+hvw4lNUg7FaMNHZpQo0=; b=mPDt36xK+ZYYFcrHTwmC5zVlpI3gRtAbfAGNjoWxef439GsHxqG8IZi5DPhj8GQALD dNIPbNT/qJXZIAn+ffsjWYKjqEPjl5oLuFZD2gfagXUU5UGKwFHDsDvqGLMa0IMMva4I rXrQKPr5+2lKBQ54C90JqIxQniWsT5mXp3aag=*Domainkey-signature*: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; b=GEK+k37ND9+pap5KAPKSMNSvQkdAaHegJnpyyZjQ/fEihDfRbKIx2hZNXKfuF5RimR fAHmnHMrOjUC8PhXonzxQ0mg9tiFK4PL16Q687ssXQJZuoXCCIfEM/G3M4ppWn9uFdYn M3LsFppGiUzJWuCfmuDnSkPIbaup/DCFjnByY=

I mostly agree. On Mon, May 11, 2009 at 3:39 PM, Benoit Jacob <jacob.benoit.1@xxxxxxxxx> wrote: > First of all we could have a DiagonalMatrixBase::toMatrix() that > returns a plain matrix (see at the end for naming discussion), so that > the user who wants something that behaves like a matrix, can get a > plain matrix if he wants to: > > cout << vec.asDiagonal().toMatrix() << endl; > > The argument for having instead a asDense() returning a MatrixBase, is > to avoid the cost of evaluating the matrix, but then remember that > this expression would have a very expensive coeff() method as it would > have to do a if(row==col). So as soon as you're accessing a large part > of the matrix, it's not good anyway (performance wise) to have an > asDense expression here. right, and I suggest toDenseMatrix() for the function name because we also have that feature for sparse matrices (debug purpose mainly) > I also think that there isn't much of a use case for doing directly > "vec.asDiagonal()(i,j)" -- it's OK, i think, to force the user to > replace that by "i==j?vec(i):0" making him realize where there is room > for optimization. that's clear. > Is there anything I didn't think of? the ability to write a generic template function taking any but only Eigen's objects (dense xpr, diagonal, sparse, etc.) ?This would require: 1) add a "meta" base class for all other base classes (MatrixBase, Sparse...., Diagonal...) 2) have a set of common high level operations supported for and between all types (matrix product, scalar product, add, sub, etc). Currently I guess we can safely forget about that and still add it later if it's really needed. > Yes that means that one could no longer do: > mat * mat2.marked<DiagonalBits>() I think this should not be allowed. > To summarize my plan: > *no more changes to Diagonal (the ex-DiagonalCoeffs) > *make DiagonalMatrixBase no longer inherit MatrixBase. It doesn't even > need a coeff() method. > *DiagonalMatrix still inherits DiagonalMatrixBase > *DiagonalMatrixWrapper still inherits DiagonalMatrixBase > *DiagonalMatrixBase is the class against which we implement the > operator* catching diagonal products, and by the way we can also have > operator= etc. > *DiagonalMatrixBase::toMatrix() returns a plain Matrix. > > (the last method toMatrix(), i couldn't find a nicer name: eval() > suggests it returns a DiagonalMatrix, toDense() doesn't make it clear > it evaluates, ...) again I suggest toDenseMatrix()... Cheers, Gael.

**References**:**[eigen] Special Matrices: first get diagonal matrices done***From:*Benoit Jacob

**Messages sorted by:**[ date | thread ]- Prev by Date:
**Re: [eigen] Re: LU precision tuning** - Next by Date:
**Re: [eigen] Getting Householder reflections right** - Previous by thread:
**[eigen] Special Matrices: first get diagonal matrices done** - Next by thread:
**[eigen] Migration to mercurial : final tests**

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