Bird
Raised Fist0
SciPydata~5 mins

Singular Value Decomposition (svd) in SciPy

Choose your learning style10 modes available
Introduction

Singular Value Decomposition (SVD) breaks a matrix into simpler parts. It helps us understand data patterns and reduce complexity.

To compress images by keeping only important features.
To find hidden topics in text data.
To reduce the number of features in a dataset for easier analysis.
To solve systems of linear equations in a stable way.
To analyze relationships in recommendation systems.
Syntax
SciPy
from scipy.linalg import svd
U, s, VT = svd(A, full_matrices=True, lapack_driver='gesdd')

A is the input matrix you want to decompose.

U and VT are orthogonal matrices, s contains singular values.

Examples
Basic SVD on a 2x2 matrix.
SciPy
from scipy.linalg import svd
A = [[1, 2], [3, 4]]
U, s, VT = svd(A)
Use full_matrices=False to get smaller U and VT matrices.
SciPy
U, s, VT = svd(A, full_matrices=False)
Choose a different LAPACK driver for SVD calculation.
SciPy
U, s, VT = svd(A, lapack_driver='gesvd')
Sample Program

This code decomposes matrix A into U, s, and VT using SVD. It prints each part so you can see the result.

SciPy
from scipy.linalg import svd
import numpy as np

# Create a 3x2 matrix
A = np.array([[1, 2], [3, 4], [5, 6]])

# Perform SVD
U, s, VT = svd(A)

print('Matrix U:')
print(U)
print('\nSingular values:')
print(s)
print('\nMatrix VT:')
print(VT)
OutputSuccess
Important Notes

The singular values in s are always sorted from largest to smallest.

You can reconstruct the original matrix by multiplying U * diag(s) * VT.

Using full_matrices=False can save memory for large matrices.

Summary

SVD splits a matrix into three parts: U, singular values, and VT.

It helps find important patterns and reduce data size.

Scipy's svd function is easy to use and flexible.

Practice

(1/5)
1.

What does the svd function in scipy.linalg return when applied to a matrix?

easy
A. The determinant of the matrix
B. Only the singular values as a matrix
C. The inverse of the matrix
D. Three matrices: U, singular values as a vector, and VT

Solution

  1. Step 1: Understand the output of SVD

    The Singular Value Decomposition splits a matrix into three parts: U, singular values, and VT.
  2. Step 2: Recall scipy.linalg.svd output

    Scipy's svd returns U (left singular vectors), a vector of singular values, and VT (right singular vectors transposed).
  3. Final Answer:

    Three matrices: U, singular values as a vector, and VT -> Option D
  4. Quick Check:

    SVD output = U, s, VT [OK]
Hint: Remember SVD splits matrix into U, s, VT [OK]
Common Mistakes:
  • Thinking svd returns only singular values
  • Confusing VT with V
  • Expecting a single matrix output
2.

Which of the following is the correct way to import and use svd from scipy.linalg?

???
easy
A. import svd from scipy.linalg U, s, VT = svd(matrix)
B. import scipy.linalg.svd U, s, VT = scipy.linalg.svd(matrix)
C. from scipy.linalg import svd U, s, VT = svd(matrix)
D. from scipy import svd U, s, VT = svd(matrix)

Solution

  1. Step 1: Check correct import syntax

    Correct import for svd is from scipy.linalg import svd.
  2. Step 2: Confirm usage

    Then call svd(matrix) to get U, s, VT.
  3. Final Answer:

    from scipy.linalg import svd\nU, s, VT = svd(matrix) -> Option C
  4. Quick Check:

    Correct import and call = from scipy.linalg import svd U, s, VT = svd(matrix) [OK]
Hint: Use 'from scipy.linalg import svd' to import [OK]
Common Mistakes:
  • Using incorrect import syntax
  • Trying to import svd directly from scipy
  • Using 'import svd from' which is invalid
3.

Given the code below, what is the shape of U, s, and VT?

import numpy as np
from scipy.linalg import svd

matrix = np.array([[1, 2], [3, 4], [5, 6]])
U, s, VT = svd(matrix)
medium
A. U: (3, 3), s: (2,), VT: (2, 2)
B. U: (3, 2), s: (2,), VT: (2, 2)
C. U: (2, 2), s: (2,), VT: (3, 3)
D. U: (3, 3), s: (3,), VT: (2, 2)

Solution

  1. Step 1: Identify matrix shape

    The matrix is 3 rows by 2 columns (3x2).
  2. Step 2: Recall full SVD shapes

    Full SVD returns U as (m, m), s as (min(m,n),), VT as (n, n). Here m=3, n=2, so U=(3,3), s=(2,), VT=(2,2).
  3. Final Answer:

    U: (3, 3), s: (2,), VT: (2, 2) -> Option A
  4. Quick Check:

    Full SVD shapes = U(m,m), s(min(m,n)), VT(n,n) [OK]
Hint: Full SVD U shape = (m,m), VT = (n,n), s length = min(m,n) [OK]
Common Mistakes:
  • Assuming U shape is (m,n) instead of (m,m)
  • Confusing s shape with VT shape
  • Mixing up rows and columns in shapes
4.

What is wrong with the following code snippet that tries to compute the SVD of a matrix?

from scipy.linalg import svd

matrix = [[1, 0], [0, 1]]
U, s, VT = svd(matrix)
print(U, s, VT)
medium
A. svd function does not return three values
B. The matrix should be a NumPy array, not a list of lists
C. The import statement is incorrect
D. The print statement syntax is wrong

Solution

  1. Step 1: Check input type for svd

    svd expects a NumPy array or similar numeric array, not a plain Python list.
  2. Step 2: Identify error cause

    Passing a list of lists can cause unexpected behavior or errors; converting to np.array fixes this.
  3. Final Answer:

    The matrix should be a NumPy array, not a list of lists -> Option B
  4. Quick Check:

    Input must be np.array for svd [OK]
Hint: Always convert input to np.array before svd [OK]
Common Mistakes:
  • Passing Python lists directly to svd
  • Assuming svd returns a single matrix
  • Incorrect import or print syntax
5.

You have a large dataset matrix X of shape (1000, 50). You want to reduce its dimensionality to 10 while keeping most information. Which step using scipy.linalg.svd helps achieve this?

hard
A. Compute full SVD, then keep only the first 10 singular values and corresponding vectors
B. Compute SVD and discard the singular values
C. Use svd to get U and VT, then multiply all components without truncation
D. Apply svd only on a 10x10 submatrix of X

Solution

  1. Step 1: Understand dimensionality reduction with SVD

    Reducing dimensions means keeping top singular values and vectors that capture most variance.
  2. Step 2: Apply truncation after full SVD

    Compute full SVD, then keep first 10 singular values and corresponding columns of U and rows of VT to reduce size.
  3. Final Answer:

    Compute full SVD, then keep only the first 10 singular values and corresponding vectors -> Option A
  4. Quick Check:

    Truncate SVD components to reduce dimensions [OK]
Hint: Keep top singular values and vectors for reduction [OK]
Common Mistakes:
  • Discarding singular values loses information
  • Using only a submatrix loses global structure
  • Not truncating leads to no reduction
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard