Bird
Raised Fist0
NumPydata~10 mins

When NumPy is not fast enough - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to import the library that helps speed up Python loops.

NumPy
import [1]
Drag options to blanks, or click blank then click option'
Anumba
Bpandas
Cmatplotlib
Dscipy
Attempts:
3 left
💡 Hint
Common Mistakes
Importing pandas instead of numba.
Trying to speed up code without any special library.
2fill in blank
medium

Complete the code to create a fast function using numba's decorator.

NumPy
@[1]
def fast_sum(arr):
    total = 0
    for x in arr:
        total += x
    return total
Drag options to blanks, or click blank then click option'
Ajit
Bnjit
Cvectorize
Dcompile
Attempts:
3 left
💡 Hint
Common Mistakes
Using @jit which is slower than @njit in some cases.
Using @vectorize which is for element-wise functions.
3fill in blank
hard

Fix the error in the code by completing the blank to convert a list to a NumPy array.

NumPy
import numpy as np

my_list = [1, 2, 3, 4]
my_array = np.[1](my_list)
print(my_array)
Drag options to blanks, or click blank then click option'
Aasarray
Blist
Carray
Dfromlist
Attempts:
3 left
💡 Hint
Common Mistakes
Using np.list which does not exist.
Using np.fromlist which is not a valid NumPy function.
4fill in blank
hard

Fill both blanks to create a dictionary comprehension that stores squares of numbers greater than 3.

NumPy
squares = {x: x[1]2 for x in range(1, 6) if x [2] 3}
Drag options to blanks, or click blank then click option'
A**
B>
C<
D*
Attempts:
3 left
💡 Hint
Common Mistakes
Using * instead of ** for power.
Using < instead of > in the condition.
5fill in blank
hard

Fill all three blanks to create a dictionary comprehension that stores uppercase keys and values greater than 0.

NumPy
result = { [1]: [2] for k, v in data.items() if v [3] 0}
Drag options to blanks, or click blank then click option'
Ak.upper()
Bv
C>
Dk.lower()
Attempts:
3 left
💡 Hint
Common Mistakes
Using k.lower() instead of k.upper().
Using < instead of > in the condition.

Practice

(1/5)
1. Why might NumPy sometimes be too slow for certain tasks?
easy
A. Because it does not support mathematical operations
B. Because it cannot handle arrays larger than 100 elements
C. Because it only works on single-core processors
D. Because it uses Python loops internally which are slow

Solution

  1. Step 1: Understand NumPy's speed basis

    NumPy is fast because it uses optimized C code, but Python loops around NumPy operations can slow it down.
  2. Step 2: Identify the cause of slowness

    When complex tasks require Python loops or non-vectorized code, speed drops because Python loops are slower than compiled code.
  3. Final Answer:

    Because it uses Python loops internally which are slow -> Option D
  4. Quick Check:

    Python loops slow NumPy = Because it uses Python loops internally which are slow [OK]
Hint: NumPy is fast with vectorized code, slow with Python loops [OK]
Common Mistakes:
  • Thinking NumPy can't handle large arrays
  • Believing NumPy only works on single-core CPUs
  • Assuming NumPy lacks math operation support
2. Which of the following is the correct way to import Numba to speed up NumPy code?
easy
A. import numba as nb
B. import numba.speedup
C. from numba import jit
D. import numba.jit

Solution

  1. Step 1: Recall Numba import syntax

    Numba's just-in-time compiler is accessed by importing jit from numba: from numba import jit.
  2. Step 2: Check other options

    Options A, C, and D are invalid imports; 'import numba as nb' imports the whole module but requires nb.jit to use the decorator, while C and D do not exist.
  3. Final Answer:

    from numba import jit -> Option C
  4. Quick Check:

    Correct Numba import = from numba import jit [OK]
Hint: Use 'from numba import jit' to access speedup decorator [OK]
Common Mistakes:
  • Trying to import submodules that don't exist
  • Importing whole numba without jit
  • Using incorrect import syntax
3. What will be the output of this code snippet?
import numpy as np
from numba import jit

@jit(nopython=True)
def sum_squares(n):
    total = 0
    for i in range(n):
        total += i * i
    return total

print(sum_squares(5))
medium
A. 30
B. 55
C. 10
D. Error due to jit decorator

Solution

  1. Step 1: Understand the function logic

    The function sums squares of numbers from 0 to n-1. For n=5, it sums 0²+1²+2²+3²+4² = 0+1+4+9+16 = 30.
  2. Step 2: Check jit decorator effect

    The jit decorator speeds up the function but does not change output. No error occurs.
  3. Final Answer:

    30 -> Option A
  4. Quick Check:

    Sum of squares 0 to 4 = 30 [OK]
Hint: Sum squares 0 to 4 = 30; jit doesn't change output [OK]
Common Mistakes:
  • Confusing sum of squares with sum of numbers
  • Expecting jit to cause errors
  • Miscounting range end
4. Identify the error in this code that tries to speed up a NumPy operation using Numba:
import numpy as np
from numba import jit

@jit
def multiply_array(arr):
    return arr * 2

print(multiply_array(np.array([1, 2, 3])))
medium
A. Numba jit cannot speed up NumPy array operations directly
B. The jit decorator is missing parentheses
C. The function multiply_array must use a loop inside
D. NumPy arrays cannot be passed to jit functions

Solution

  1. Step 1: Understand Numba's limitations

    Numba jit speeds up Python loops and scalar operations but does not speed up vectorized NumPy operations directly.
  2. Step 2: Analyze the code behavior

    The function returns arr * 2, which is a NumPy vectorized operation. Numba jit won't speed this up; it just calls NumPy internally.
  3. Final Answer:

    Numba jit cannot speed up NumPy array operations directly -> Option A
  4. Quick Check:

    Numba jit doesn't speed vectorized NumPy ops = Numba jit cannot speed up NumPy array operations directly [OK]
Hint: Numba jit speeds loops, not vectorized NumPy ops [OK]
Common Mistakes:
  • Thinking jit decorator syntax is wrong
  • Believing jit requires loops inside
  • Assuming NumPy arrays can't be used with jit
5. You have a large NumPy array and want to speed up a custom function that applies a complex calculation element-wise. Which approach is best?
hard
A. Use pure Python loops without any acceleration
B. Rewrite the function using Numba jit with a loop over array elements
C. Convert the array to a list and use list comprehensions
D. Use NumPy vectorized operations only, no jit

Solution

  1. Step 1: Understand the problem context

    Complex element-wise calculations may not be vectorizable easily with NumPy, so pure vectorized operations might not work.
  2. Step 2: Choose the best speedup method

    Using Numba jit with a loop over array elements compiles the loop to fast machine code, speeding up the custom calculation.
  3. Step 3: Evaluate other options

    Pure Python loops and list comprehensions are slow; vectorized NumPy ops may not support complex logic.
  4. Final Answer:

    Rewrite the function using Numba jit with a loop over array elements -> Option B
  5. Quick Check:

    Numba jit + loops = best speedup for complex element-wise ops [OK]
Hint: Use Numba jit with loops for complex element-wise speedup [OK]
Common Mistakes:
  • Relying on pure Python loops for speed
  • Converting arrays to lists unnecessarily
  • Assuming all complex ops can be vectorized
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