📖 Scenario: You work in a small bakery that tracks daily sales of different types of bread. You want to analyze the sales data to understand how many breads were sold each day and how the prices affect total revenue.
🎯 Goal: Build a small program using numpy to apply 1D and 2D broadcasting. You will create arrays for daily sales and prices, then calculate total revenue using broadcasting.
📋 What You'll Learn
Create a 2D numpy array called sales representing the number of breads sold for 3 types over 4 days.
Create a 1D numpy array called prices representing the price of each bread type.
Use broadcasting to calculate the total revenue per day for each bread type.
Print the resulting revenue array.
💡 Why This Matters
🌍 Real World
Broadcasting helps quickly perform operations on sales and price data without writing loops, saving time and reducing errors.
💼 Career
Data analysts and scientists use broadcasting in numpy to efficiently handle and analyze multi-dimensional data like sales, prices, and revenues.
Progress0 / 4 steps
1
Create the sales data array
Create a 2D numpy array called sales with these exact values: [[10, 15, 7], [12, 18, 5], [9, 14, 8], [11, 16, 6]]. This array represents the number of breads sold for 3 types over 4 days.
NumPy
Hint
Use np.array() to create the 2D array with the exact values.
2
Create the prices array
Create a 1D numpy array called prices with these exact values: [2.5, 3.0, 4.0]. This array represents the price of each bread type.
NumPy
Hint
Use np.array() to create the 1D array with the exact prices.
3
Calculate total revenue using broadcasting
Use broadcasting to multiply the sales array by the prices array and store the result in a new variable called revenue. This will calculate the total revenue per bread type for each day.
NumPy
Hint
Simply multiply the 2D sales array by the 1D prices array to use broadcasting.
4
Print the revenue array
Print the revenue array to display the total revenue per bread type for each day.
NumPy
Hint
Use print(revenue) to show the final result.
Practice
(1/5)
1. What does broadcasting in NumPy allow you to do with arrays of different shapes?
easy
A. Only add arrays if they have the exact same shape
B. Sort arrays in ascending order
C. Convert arrays into lists automatically
D. Perform element-wise operations without manually reshaping arrays
Solution
Step 1: Understand broadcasting concept
Broadcasting lets NumPy perform math on arrays with different shapes by stretching smaller arrays.
Step 2: Identify what broadcasting enables
This means you can do element-wise operations without manually reshaping arrays to the same shape.
Final Answer:
Perform element-wise operations without manually reshaping arrays -> Option D
Quick Check:
Broadcasting = element-wise operations on different shapes [OK]
Hint: Broadcasting stretches smaller arrays to match bigger ones [OK]
Common Mistakes:
Thinking arrays must have the same shape to operate
Confusing broadcasting with sorting or reshaping
Assuming broadcasting copies data
2. Which of the following is the correct way to add a 1D array b = np.array([1, 2, 3]) to each row of a 2D array a with shape (4, 3)?
easy
A. a + b
B. a + b.T
C. a + b.reshape(3, 1)
D. a + b.reshape(1, 4)
Solution
Step 1: Check shapes of arrays
Array a has shape (4, 3), and b has shape (3,). Adding a + b broadcasts b across rows.
Step 2: Understand broadcasting rules
Since b matches the number of columns, it adds to each row correctly without reshaping.
Final Answer:
a + b -> Option A
Quick Check:
1D array added across rows = a + b [OK]
Hint: Add 1D array directly if its length matches columns [OK]
Common Mistakes:
Trying to transpose 1D array which has no effect
Reshaping to wrong dimensions causing errors
Confusing rows and columns in shapes
3. What is the output of the following code?
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([10, 20, 30])
result = a + b
print(result)
medium
A. [[11 22 33]
[14 25 36]]
B. [[11 12 13]
[14 15 16]]
C. [[10 20 30]
[10 20 30]]
D. Error due to shape mismatch
Solution
Step 1: Analyze shapes and operation
a shape is (2,3), b shape is (3,). Adding broadcasts b across rows.
Hint: Add 1D array to 2D rows matches columns [OK]
Common Mistakes:
Expecting error due to different shapes
Adding element-wise without broadcasting
Confusing rows and columns in addition
4. Identify the error in this code snippet:
import numpy as np
a = np.array([[1, 2], [3, 4], [5, 6]])
b = np.array([10, 20, 30])
result = a + b
print(result)
medium
A. Using wrong operator for addition
B. Syntax error in array creation
C. Shapes of a and b are incompatible for broadcasting
D. No error, code runs fine
Solution
Step 1: Check shapes of arrays
a shape is (3, 2), b shape is (3,). They differ in second dimension.
Step 2: Understand broadcasting rules
Broadcasting requires trailing dimensions to match or be 1. Here, 2 != 3, so addition fails.
Final Answer:
Shapes of a and b are incompatible for broadcasting -> Option C
Quick Check:
Shape mismatch causes broadcasting error [OK]
Hint: Check trailing dimensions match or are 1 for broadcasting [OK]
Common Mistakes:
Assuming any shapes can broadcast
Ignoring dimension order in arrays
Thinking 1D arrays always broadcast to 2D
5. You have a 2D array data of shape (5, 4) representing 5 samples with 4 features each. You want to subtract the mean of each feature (given as a 1D array mean_vals of length 4) from the corresponding feature column in data. Which code correctly applies broadcasting to do this?
hard
A. data - mean_vals.reshape(4, 1)
B. data - mean_vals
C. data - mean_vals.reshape(1, 5)
D. data - mean_vals.T
Solution
Step 1: Understand shapes and operation
data shape is (5, 4), mean_vals shape is (4,). Subtracting mean_vals from data broadcasts mean_vals across rows.
Step 2: Confirm correct broadcasting
Since mean_vals length matches columns, data - mean_vals subtracts feature-wise means correctly.
Final Answer:
data - mean_vals -> Option B
Quick Check:
Subtract 1D array from 2D rows = data - mean_vals [OK]