Open mars0i opened 7 years ago
Clatrix implementation is here: https://github.com/tel/clatrix/blob/master/src/clatrix/core.clj . This would be the best place to file issues with the Clatrix implementation.
I agree that results should be consistent, and the core.matrix docstring should describe the dimensions as you suggest. Probably Clatrix should return the full SVD by default.
OK, good--will do.
I hadn't noticed mp/PSVDDecomposition (svd [m options] ...
in that file. I'd only seen the (defn svd
, which has a different interface.
Vectorz's
svd
returns a full singular-value decomposition, while the Clatrix core.matrixsvd
returns some kind of reduced singular-value decomposition. That means that the shapes of:U
and:V*
matrices can differ between the two versions ofsvd
. The raw Clatrix interface allows you to get the full SVD with optional keyword arguments (:type :full
). Maybe the optional arguments should be added to the core.matrix Clatrix wrapper? Or should Vectorz return a reduced representation? (I can't figure out where the core.matrix wrapper for Clatrix lives.)I gather that it's OK for the U and V* matrices to be negated--i.e. the vectorz versions are -1 times the clatrix versions.
Given that there are various reduced representations that people use for SVD, perhaps the docstring for
svd
in core.matrix should explicitly specify the dimensions of the:U
and:V*
matrices, i.e. that the first is m x m and that the second is n x n, and not only that they are unitary. (This is helpful if you know you need to do something withsvd
but don't really know much about singular-value decompositions. Then you go to learn about them, and find out that there are different return values that you could get... and have to figure out that unitary implies square, and reduced representations are not necessarily square, so thereforesvd
must not be returning a reduced representation. Explicit dimensions short-cuts that reasoning a bit. :-) Related to #321.