📖 Scenario: Imagine you work in a company that tracks sales data for different stores over several days. You have daily sales data for each store, and you want to apply a fixed tax rate to all sales to find the tax amount for each store on each day.
🎯 Goal: You will create a 3D NumPy array representing sales data for multiple stores over multiple days and apply a tax rate using broadcasting with higher dimensions. You will then output the tax amounts for each store and day.
📋 What You'll Learn
Create a 3D NumPy array called sales with shape (2, 3, 4) containing specific sales values.
Create a variable called tax_rate with the value 0.1 (10%).
Use broadcasting to multiply the sales array by tax_rate and store the result in tax_amount.
Print the tax_amount array.
💡 Why This Matters
🌍 Real World
Companies often need to apply fixed rates like taxes or discounts to large sets of sales data across multiple stores and days. Broadcasting helps apply these calculations efficiently without writing loops.
💼 Career
Understanding broadcasting with higher dimensions is essential for data scientists and analysts working with multi-dimensional data arrays in Python using NumPy.
Progress0 / 4 steps
1
Create the sales data array
Create a 3D NumPy array called sales with shape (2, 3, 4) containing these exact values: [[[10, 20, 30, 40], [15, 25, 35, 45], [20, 30, 40, 50]], [[12, 22, 32, 42], [17, 27, 37, 47], [22, 32, 42, 52]]].
NumPy
Hint
Use np.array() and type the nested lists exactly as shown.
2
Set the tax rate
Create a variable called tax_rate and set it to 0.1 to represent a 10% tax.
NumPy
Hint
Just assign 0.1 to the variable tax_rate.
3
Calculate tax amount using broadcasting
Use broadcasting to multiply the sales array by the tax_rate variable and store the result in a new variable called tax_amount.
NumPy
Hint
Just multiply the array sales by tax_rate and assign it to tax_amount.
4
Print the tax amount array
Print the tax_amount array to see the tax for each store and day.
NumPy
Hint
Use print(tax_amount) to display the result.
Practice
(1/5)
1. What does broadcasting in NumPy allow you to do when working with arrays of different shapes?
easy
A. Copy data from smaller arrays to larger arrays explicitly
B. Perform element-wise operations by stretching smaller arrays to match larger ones
C. Only work with arrays of the exact same shape
D. Convert arrays into lists automatically
Solution
Step 1: Understand broadcasting concept
Broadcasting lets NumPy perform operations on arrays with different shapes by stretching the smaller array without copying data.
Step 2: Compare options with concept
Only Perform element-wise operations by stretching smaller arrays to match larger ones correctly describes this behavior. Options B, C, and D are incorrect because broadcasting does not copy data explicitly, does not require same shape, and does not convert arrays to lists.
Final Answer:
Perform element-wise operations by stretching smaller arrays to match larger ones -> Option B
Quick Check:
Broadcasting = Stretch smaller arrays [OK]
Hint: Broadcasting stretches smaller arrays to match bigger ones [OK]
Common Mistakes:
Thinking broadcasting copies data
Believing arrays must have same shape
Confusing broadcasting with data type conversion
2. Which of the following NumPy array shapes can be broadcast together for element-wise addition?
easy
A. (4, 5) and (4, 5, 1)
B. (2, 3) and (3, 2)
C. (3, 1, 5) and (1, 4, 5)
D. (3, 3) and (2, 3)
Solution
Step 1: Check broadcasting rules for each dimension
Shapes (3,1,5) and (1,4,5) can broadcast because dimensions are compatible: 3 vs 1, 1 vs 4, 5 vs 5.
Step 2: Verify other options
Options A, B, and D have incompatible dimensions that cannot be broadcast for element-wise addition.
Hint: Match dimensions from right, 1 or equal size broadcasts [OK]
Common Mistakes:
Ignoring dimension order when checking compatibility
Assuming all different shapes can broadcast
Confusing shape sizes in different axes
3. What is the output of this code?
import numpy as np
A = np.ones((2, 3, 1))
B = np.arange(4).reshape(1, 1, 4)
C = A + B
print(C.shape)
medium
A. ValueError due to shape mismatch
B. (2, 3, 1)
C. (1, 1, 4)
D. (2, 3, 4)
Solution
Step 1: Analyze shapes of A and B
A has shape (2, 3, 1), B has shape (1, 1, 4). Broadcasting rules allow these to combine because 1 can stretch to 2 and 3, and 1 can stretch to 4.
Step 2: Determine resulting shape
The result shape is the maximum along each dimension: max(2,1)=2, max(3,1)=3, max(1,4)=4, so (2, 3, 4).
Final Answer:
(2, 3, 4) -> Option D
Quick Check:
Broadcast result shape = (2,3,4) [OK]
Hint: Result shape = max dimension sizes per axis [OK]
Common Mistakes:
Confusing which dimension broadcasts to which
Expecting error instead of broadcasting
Mixing up shape order
4. Identify the error in this code snippet:
import numpy as np
X = np.ones((3, 1, 2))
Y = np.ones((2, 3))
Z = X + Y
medium
A. Shapes (3,1,2) and (2,3) cannot be broadcast together
B. Y should be reshaped to (1, 2, 3) before addition
C. X and Y have incompatible data types
D. No error, code runs fine
Solution
Step 1: Compare shapes for broadcasting
X shape is (3,1,2), Y shape is (2,3). Aligning from right: 2 vs 3 (mismatch), 1 vs 2 (mismatch), 3 vs missing dimension.
Step 2: Conclude broadcasting compatibility
Dimensions do not match or equal 1, so broadcasting fails and raises an error.
Final Answer:
Shapes (3,1,2) and (2,3) cannot be broadcast together -> Option A
Quick Check:
Broadcast error due to incompatible shapes [OK]
Hint: Check shapes right to left; mismatch means error [OK]
Common Mistakes:
Assuming automatic reshaping without explicit code
Ignoring dimension order in broadcasting
Thinking data types cause this error
5. You have a 3D array data with shape (10, 1, 5) representing 10 samples, 1 channel, and 5 features. You want to add a bias vector of shape (5,) to each sample and channel. Which code correctly applies broadcasting to add the bias to data?
hard
A. bias = np.array([1,2,3,4,5])
data + bias
B. bias = np.array([[1,2,3,4,5]])
data + bias
C. bias = np.array([1,2,3,4,5]).reshape((5,1))
data + bias
D. bias = np.array([[[1,2,3,4,5]]])
data + bias
Solution
Step 1: Understand required bias shape and broadcasting
data shape (10,1,5). Bias vector shape (5,) pads with 1s on left to (1,1,5) and broadcasts correctly across samples and channels.
Step 2: Evaluate each option
A: bias shape (5,), correct. B: shape (1,5) also broadcasts correctly, but is redundant. C: shape (5,1) incompatible. D: shape (1,1,5) also broadcasts correctly, but is more verbose.
Final Answer:
bias = np.array([1,2,3,4,5]) data + bias -> Option A
Quick Check:
(10,1,5) + (5,) -> broadcasts OK
Hint: Bias shape must match trailing dims with extra dims as 1 [OK]
Common Mistakes:
Using 1D bias without extra dimensions
Wrong reshape causing shape mismatch
Assuming automatic dimension expansion without reshape
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.