Hi Ted,
If the eigenvectors are premultiplied by the diagonal/eigenvalues before
they're persisted, I guess this the reason why it's okay for the
eigenvalues not to be persisted separately? From looking at the code,
persistence takes place in two places:
* DistributedLanczosSolver.serializeOutput(): although the message
"Persisting X eigenVectors and eigenValues to..." would appear to
signify that the eigenvalues are persisted. The eigenValues List
is in fact ignored here.
* EigenVerificationJob.saveCleanEigens() (--cleansvd argument has
been specified): this persists EigenVector instances, which are
subclasses of DenseVector. The eigenValue and cosAngleError are
stored within a EigenVector.name String, and some parse methods
exist to retrieve them. However, in practice, both of these values
are ignored as VectorWritable.writeVector() appears to save
EigenVectors as DenseVectors.
If it was intended that the eigenvalues should actually be persisted,
then it looks like there may be a bug here.
Regards,
Derek
On 25/02/11 17:36, Ted Dunning wrote:
Generally the SVD in these sorts of situations does not return the entire
set of three matrices. Instead either the left or right (but usually the
right) eigenvectors premultiplied by the diagonal or the square root of the
diagonal element.
I can't comment specifically on your situation, but hopefully knowing that
the algorithm isn't supposed to return all three matrices will help you.
On Fri, Feb 25, 2011 at 7:37 AM, Dan Brickley<[email protected]> wrote:
My problem is that I was imagining the results would be three factor'd
matrixes (which when multiplied would reproduce the original, and from
which I could take left-most columns per various SVD tutorials).