Re: [eigen] Bug(s) report: SparseQR on tall-thin matrices |

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

*To*: eigen@xxxxxxxxxxxxxxxxxxx*Subject*: Re: [eigen] Bug(s) report: SparseQR on tall-thin matrices*From*: Julian Kent <jkflying@xxxxxxxxx>*Date*: Fri, 13 Jan 2017 11:24:33 +0100*Dkim-signature*: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to; bh=MtO7z63PYY6QGgWjfOt5hmAqzMwuQf18c3V+RluoCKM=; b=fP6JS+/4w+bqtNyDII5QMZGTYD//s8XaACQ+GA3sWeDTN1lIAd72WyXkoEyPBl9er5 V4OU6L7KINddhz+AyYxeXz2oRKy4oKvzPhLoT15uhzrLOWjf9M1jklc0xX299hn4ah4x 6fxxKuFW5IMm7qSk4HFqDmfXtdS+fiCTfsSx1Uz4e0ekA3u7cVsq4Bhni88LOgmMjE9M Fr+VKbWjObD7nsIdXLQVeakrGbk7+vP+86+XLFp5iPsoFKmCfbypN92mmymBIaYRKxTB X/WZW+vh6JxvkqaO4kD13J8KZgtYL04Qj/ljXhmaD4gfnRiomVcZ+Zv0mkxAtEZMEYRg 9edg==

Whoops, sorry about the auto-signature that slipped in there. Switching to personal email.

On 13 January 2017 at 11:18, Julian Kent <julian.kent@xxxxxxxxx> wrote:

Ah, yes, I guess I am more used to the 'thin' QR decomposition Q/R sizes. Regardless, we need a way of correctly accessing a 'thin' matrix somehow. Perhaps making a 'leftColumns' function for matrixQ? This would let Q be m x m and R be m x n, but you can easily access the thin with Q.leftColumns(n) and R.topLeftCorner(n, n) for all matrix sizes.I also have some ideas for making SparseQR_QProduct faster using a gather-dense-distribute pattern which would allow for improved handling of dense blocks, although I'm not sure if you've already tried this approach. If you think it is promising I could probably spend some time on it.

Julian Kent | Computer Vision Engineer

EPFL Innovation Park| Building F |1015 Lausanne, Switzerland

https://pix4d.com |julian.kent@xxxxxxxxx On Thu, Jan 12, 2017 at 10:44 PM, Gael Guennebaud <gael.guennebaud@xxxxxxxxx> wrote:Hi,this is mainly an issue of "full QR" versus "thin QR", and the actual implementation seems to be inconsistent here. If the input matrix is m x n, m>=n, then:qr.matrixQ().cols() == nbutSparseMatrix Q = qr.matrixQ();Q.cols() == mTo be consistent with the dense world, qr.matrixQ().cols() should be equal to m by default plus some mechanism to extract the thin part. We could also add a thinQ() method. Then regarding matrixR(), we could add a thinR() method for convenience.gaelOn Mon, Jan 9, 2017 at 3:51 PM, Julian Kent <julian.kent@xxxxxxxxx> wrote:2) qr.matrixQ() claims to be size m x n, as expected. However, trying to multiply qr.matrixQ() with a n x k dense matrix gives an assertion error:While trying to use SparseQR on a matrix A with rows > cols, I found 2 bugs:1) The size of qr.matrixR() is m x n, instead of n x n as expected. SparseQR.h:305 initialises m_R with size (m,n), and nothing does any resizing. For now I'm just taking the topRows(n), but I'm not entirely sure this is correct, and it certainly isn't the behaviour I expect. Shouldn't there be a non-destructive resize, if the extra rows are really necessary for intermediate procesing?

Eigen/src/SparseQR/SparseQR.h:640: void Eigen::SparseQR_QProduct<Spars eQRType, Derived>::evalTo(DesType&) const [with DesType = Eigen::Matrix<double, -1, -1>; SparseQRType = Eigen::SparseQR<Eigen::SparseM atrix<double>, Eigen::NaturalOrdering<int> >; Derived = Eigen::Matrix<double, -1, -1>]: Assertion `m_qr.m_Q.rows() == m_other.rows() && "Non conforming object sizes"' failed. In the .solve(...) only matrixQ.transpose() is used, which is probably why this hasn't shown up earlier.These bugs may be interacting with each other to fool any accuracy tests using A*P = Q*R on tall-thin matrices, with the extra rows in R passing the assert in Q.Let me know if you need example matrices to work with.ThanksJulian Kent

**Follow-Ups**:**RE: [eigen] Bug(s) report: SparseQR on tall-thin matrices***From:*Andrew Fitzgibbon

**References**:**[eigen] Bug(s) report: SparseQR on tall-thin matrices***From:*Julian Kent

**Re: [eigen] Bug(s) report: SparseQR on tall-thin matrices***From:*Gael Guennebaud

**Re: [eigen] Bug(s) report: SparseQR on tall-thin matrices***From:*Julian Kent

**Messages sorted by:**[ date | thread ]- Prev by Date:
**Re: [eigen] Bug(s) report: SparseQR on tall-thin matrices** - Next by Date:
**Re: [eigen] New indexing/slicing API: almost ready to be merged** - Previous by thread:
**Re: [eigen] Bug(s) report: SparseQR on tall-thin matrices** - Next by thread:
**RE: [eigen] Bug(s) report: SparseQR on tall-thin matrices**

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