Skip to content Skip to sidebar Skip to footer

Getting The Singular Values Of Np.linalg.svd As A Matrix

Given a 5x4 matrix A = A piece of python code to construct the matrix A = np.array([[1, 0, 0, 0], [0, 0, 0, 4], [0, 3, 0, 0], [0, 0, 0, 0

Solution 1:

You can get most of the way there with diag:

>>> u, s, vh = np.linalg.svd(a)
>>> np.diag(s)
array([[ 4.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  3.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  2.23606798,  0.        ],
       [ 0.        ,  0.        ,  0.        , -0.        ]])

Note that wolfram alpha is giving an extra row. Getting that is marginally more involved:

>>>sigma = np.zeros(A.shape, s.dtype)>>>np.fill_diagonal(sigma, s)>>>sigma
array([[ 4.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  3.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  2.23606798,  0.        ],
       [ 0.        ,  0.        ,  0.        , -0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.        ]])

Depending on what your goal is, removing a column from U might be a better approach than adding a row of zeros to sigma. That would look like:

>>>u, s, vh = np.linalg.svd(a, full_matrices=False)

Post a Comment for "Getting The Singular Values Of Np.linalg.svd As A Matrix"