svd formular: A ≈ UΣV*
I use numpy.linalg.svd to run svd algorithm.
And I want to set dimension of matrix.
For example: A=3*5
dimension, after running numpy.linalg.svd, U=3*3
dimension, Σ=3*1
dimension, V*=5*5
dimension.
I need to set specific dimension like U=3*64
dimension, V*=64*5
dimension. But it seems there is no optional dimension parameter can be set in numpy.linalg.svd.
If A
is a 3 x 5
matrix then it has rank at most 3. Therefore the SVD of A
contains at most 3 singular values. Note that in your example above, the singular values are stored as a vector instead of a diagonal matrix. Trivially this means that you can pad your matrices with zeroes at the bottom. Since the full S matrix contains of 3 values on the diagonal followed by the rest 0's (in your case it would be 64x64 with 3 nonzero values), the bottom rows of V and the right rows of U don't interact at all and can be set to anything you want.
Keep in mind that this isn't the SVD of A anymore, but instead the condensed SVD of the matrix augmented with a lot of 0's.