Bird
Raised Fist0
SciPydata~20 mins

2D FFT (fft2) in SciPy - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
2D FFT Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of 2D FFT on a simple matrix
What is the output of the following code using scipy.fft.fft2 on a 2x2 matrix?
SciPy
import numpy as np
from scipy.fft import fft2

matrix = np.array([[1, 2], [3, 4]])
result = fft2(matrix)
print(np.round(result, 2))
A
[[10.+0.j  2.+0.j]
 [ 4.+0.j  0.+0.j]]
B
[[10.+0.j  2.+0.j]
 [-4.+0.j  0.+0.j]]
C
[[10.+0.j -2.+0.j]
 [ 4.+0.j  0.+0.j]]
D
[[10.+0.j -2.+0.j]
 [-4.+0.j  0.+0.j]]
Attempts:
2 left
💡 Hint
Recall that 2D FFT sums over rows and columns with complex exponentials.
❓ data_output
intermediate
1:30remaining
Shape of 2D FFT result
If you apply scipy.fft.fft2 to a 5x3 matrix, what will be the shape of the output?
SciPy
import numpy as np
from scipy.fft import fft2

matrix = np.random.rand(5,3)
result = fft2(matrix)
print(result.shape)
A(8, 8)
B(3, 5)
C(5, 3)
D(1, 1)
Attempts:
2 left
💡 Hint
The FFT output shape matches the input shape unless specified otherwise.
❓ visualization
advanced
3:00remaining
Visualizing magnitude spectrum of 2D FFT
Which option correctly plots the magnitude spectrum of the 2D FFT of a 256x256 image stored in image?
SciPy
import numpy as np
import matplotlib.pyplot as plt
from scipy.fft import fft2, fftshift

# image is a 256x256 numpy array
f_transform = fft2(image)
f_shifted = fftshift(f_transform)
magnitude_spectrum = np.abs(f_shifted)
plt.imshow(np.log1p(magnitude_spectrum), cmap='gray')
plt.title('Magnitude Spectrum')
plt.show()
AUse fft2, plot magnitude spectrum directly without fftshift or log scale.
BUse fft2, then fftshift, then plot log of magnitude spectrum with gray colormap.
CUse fftshift first, then fft2, then plot magnitude spectrum with jet colormap.
DPlot the real part of fft2 output without any transformation or scaling.
Attempts:
2 left
💡 Hint
Centering the zero frequency with fftshift and using log scale helps visualize details.
🧠 Conceptual
advanced
2:00remaining
Effect of zero-padding on 2D FFT resolution
What is the main effect of zero-padding a 2D signal before applying fft2?
AIt increases frequency resolution by interpolating the FFT output.
BIt changes the original frequency content of the signal.
CIt removes noise from the signal before FFT.
DIt reduces the computation time of the FFT.
Attempts:
2 left
💡 Hint
Think about how zero-padding affects the FFT output size and frequency bins.
🔧 Debug
expert
2:00remaining
Identify the error in 2D FFT magnitude calculation
What error will this code raise when calculating the magnitude of a 2D FFT result?
SciPy
import numpy as np
from scipy.fft import fft2

matrix = np.array([[1, 2], [3, 4]])
result = fft2(matrix)
magnitude = np.abs(result.real)
print(magnitude)
ANo error, but magnitude is incorrect because it uses only real part.
BTypeError because np.abs cannot be applied to real numbers.
CValueError due to shape mismatch in np.abs call.
DSyntaxError due to missing parentheses.
Attempts:
2 left
💡 Hint
Check how magnitude should be calculated from complex numbers.

Practice

(1/5)
1. What does the scipy.fft.fft2 function do with a 2D array?
easy
A. It calculates the sum of all elements in the 2D array.
B. It converts the 2D data from the spatial domain to the frequency domain.
C. It sorts the 2D array in ascending order.
D. It normalizes the 2D array values between 0 and 1.

Solution

  1. Step 1: Understand the purpose of fft2

    The fft2 function computes the 2-dimensional discrete Fourier Transform, which changes data from spatial to frequency domain.
  2. Step 2: Compare options with function behavior

    Only It converts the 2D data from the spatial domain to the frequency domain. correctly describes this transformation. Other options describe unrelated operations.
  3. Final Answer:

    It converts the 2D data from the spatial domain to the frequency domain. -> Option B
  4. Quick Check:

    2D FFT = spatial to frequency transform [OK]
Hint: Remember fft2 changes space data into frequency patterns [OK]
Common Mistakes:
  • Confusing fft2 with sorting or summing functions
  • Thinking fft2 normalizes data
  • Assuming fft2 works only on 1D data
2. Which of the following is the correct way to import and use fft2 from scipy?
easy
A. import fft2 from scipy result = fft2(data)
B. import scipy.fft2 result = scipy.fft2(data)
C. from scipy import fft2 result = fft2(data)
D. from scipy.fft import fft2 result = fft2(data)

Solution

  1. Step 1: Recall correct import syntax for fft2

    The fft2 function is in the scipy.fft module, so the correct import is from scipy.fft import fft2.
  2. Step 2: Check usage correctness

    Calling fft2(data) after import is correct. Other options have wrong import syntax or module names.
  3. Final Answer:

    from scipy.fft import fft2 result = fft2(data) -> Option D
  4. Quick Check:

    Use 'from scipy.fft import fft2' [OK]
Hint: Import fft2 from scipy.fft module directly [OK]
Common Mistakes:
  • Trying to import fft2 directly from scipy
  • Using incorrect import syntax like 'import fft2 from scipy'
  • Assuming fft2 is a standalone package
3. What is the output of this code snippet?
import numpy as np
from scipy.fft import fft2

arr = np.array([[1, 2], [3, 4]])
result = fft2(arr)
print(np.round(result, 2))
medium
A. [[1.+0.j 2.+0.j] [3.+0.j 4.+0.j]]
B. [[10.+0.j 2.+0.j] [ 4.+0.j 0.+0.j]]
C. [[10.+0.j -2.+0.j] [-4.+0.j 0.+0.j]]
D. [[0.+0.j 0.+0.j] [0.+0.j 0.+0.j]]

Solution

  1. Step 1: Calculate 2D FFT of the array

    The 2D FFT of [[1,2],[3,4]] results in [[10, -2], [-4, 0]] with complex zeros in imaginary parts.
  2. Step 2: Round and check output

    Rounding to 2 decimals keeps values same. [[10.+0.j -2.+0.j] [-4.+0.j 0.+0.j]] matches the expected complex array output.
  3. Final Answer:

    [[10.+0.j -2.+0.j] [-4.+0.j 0.+0.j]] -> Option C
  4. Quick Check:

    fft2([[1,2],[3,4]]) = [[10,-2],[-4,0]] [OK]
Hint: Remember fft2 sums all elements for [0,0] frequency [OK]
Common Mistakes:
  • Confusing fft2 output with original array
  • Ignoring complex number format
  • Mixing up signs in output
4. Identify the error in this code that tries to compute the 2D FFT:
import numpy as np
from scipy.fft import fft2

arr = [[1, 2], [3]]
result = fft2(arr)
print(result)
medium
A. The array shape is invalid for fft2.
B. The input array must be a NumPy array, not a list of lists.
C. The print statement syntax is incorrect.
D. fft2 function is not imported correctly.

Solution

  1. Step 1: Check the input array construction

    The arr = [[1, 2], [3]] creates a ragged array (rows have different lengths: 2 and 1), which cannot be converted to a proper NumPy 2D array.
  2. Step 2: Identify the error cause

    fft2(arr) fails because np.asarray internally raises ValueError due to invalid shape.
  3. Final Answer:

    The array shape is invalid for fft2. -> Option A
  4. Quick Check:

    ragged lists cause shape error in fft2 [OK]
Hint: Use consistent lengths in 2D lists before fft2 [OK]
Common Mistakes:
  • Creating lists with uneven row lengths
  • Not validating array shape before FFT
  • Assuming fft2 accepts any list structure
5. You have a 2D image array and want to filter out high-frequency noise using fft2. Which sequence of steps correctly applies this?
hard
A. Apply fft2 to image, zero out high-frequency components, then apply ifft2 to get filtered image.
B. Apply ifft2 to image, zero out low-frequency components, then apply fft2 to get filtered image.
C. Apply fft2 to image, multiply all frequencies by zero, then apply ifft2 to get filtered image.
D. Apply fft2 to image, add random noise to frequency components, then apply ifft2.

Solution

  1. Step 1: Understand filtering in frequency domain

    To remove high-frequency noise, transform image with fft2, then zero out high-frequency parts (usually edges of frequency matrix).
  2. Step 2: Reconstruct filtered image

    After modifying frequency data, apply inverse fft2 (ifft2) to get back filtered spatial image.
  3. Final Answer:

    Apply fft2 to image, zero out high-frequency components, then apply ifft2 to get filtered image. -> Option A
  4. Quick Check:

    Filter noise by zeroing high frequencies in fft2 domain [OK]
Hint: Filter noise by zeroing high frequencies, then inverse fft2 [OK]
Common Mistakes:
  • Applying ifft2 before fft2
  • Zeroing all frequencies removes entire image
  • Adding noise instead of removing it
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