0
0
NumPydata~20 mins

ufunc performance considerations in NumPy - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Ufunc Performance Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of ufunc with broadcasting
What is the output of this code snippet using NumPy ufunc broadcasting?
NumPy
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([[10], [20], [30]])
result = np.add(arr1, arr2)
print(result)
A
[[11 12 13]
 [21 22 23]
 [31 32 33]]
B
[[10 11 12]
 [20 21 22]
 [30 31 32]]
C
[[11 21 31]
 [12 22 32]
 [13 23 33]]
D
[[1 2 3]
 [10 20 30]]
Attempts:
2 left
💡 Hint
Remember how broadcasting works when adding arrays of different shapes.
data_output
intermediate
1:30remaining
Number of elements processed by ufunc
Given a NumPy ufunc applied on arrays of shapes (4, 1, 3) and (1, 5, 3), how many elements does the ufunc process in total?
A60
B12
C20
D180
Attempts:
2 left
💡 Hint
Calculate the broadcasted shape first, then multiply dimensions.
🔧 Debug
advanced
2:30remaining
Identify the cause of slow ufunc performance
Why does this NumPy ufunc operation run slower than expected? Code: import numpy as np large_array = np.arange(10**7) result = np.sin(large_array) Options:
NumPy
import numpy as np
large_array = np.arange(10**7)
result = np.sin(large_array)
AThe array is too large for memory, causing swapping and slow performance.
BThe array is not contiguous in memory, causing cache misses.
CThe ufunc np.sin is not vectorized and runs element-wise in Python loop.
DUsing np.sin on integers causes implicit type conversion slowing down the ufunc.
Attempts:
2 left
💡 Hint
Check the data type of the input array and how ufuncs handle types.
🚀 Application
advanced
2:00remaining
Optimizing ufunc calls for large data
You want to apply np.exp to a very large array efficiently. Which approach is best to improve performance?
AConvert the array to Python list and use a for loop with math.exp on each element.
BSplit the array into smaller chunks and apply np.exp on each chunk sequentially.
CUse np.vectorize to create a vectorized version of math.exp and apply it.
DApply np.exp directly on the large array without any changes.
Attempts:
2 left
💡 Hint
Consider memory usage and cache efficiency for large arrays.
🧠 Conceptual
expert
3:00remaining
Understanding ufunc inner loops and performance
Which statement best explains why NumPy ufuncs achieve high performance compared to Python loops?
AUfuncs run Python loops faster by using multiple threads automatically.
BUfuncs convert arrays to Python lists internally to speed up element-wise operations.
CUfuncs use compiled C code with optimized inner loops that operate directly on memory buffers.
DUfuncs use just-in-time compilation to convert Python code to machine code at runtime.
Attempts:
2 left
💡 Hint
Think about how NumPy is implemented under the hood.