📖 Scenario: Imagine you work in a small company that analyzes sales data. You have two sets of numbers: the quantity of items sold and the price per item. You want to find the total sales amount for each item quickly and efficiently.
🎯 Goal: You will learn how to use np.einsum() to multiply arrays element-wise and sum over specific axes, which is a fast way to do calculations like total sales.
📋 What You'll Learn
Create two numpy arrays with exact values
Define a configuration variable for the operation
Use np.einsum() with the correct subscripts to compute total sales
Print the resulting array showing total sales per item
💡 Why This Matters
🌍 Real World
In real business scenarios, fast and memory-efficient calculations like total sales help companies make quick decisions.
💼 Career
Data scientists and analysts often use <code>np.einsum()</code> to speed up numerical computations in data processing and machine learning.
Progress0 / 4 steps
1
Create the sales quantity and price arrays
Create a numpy array called quantities with values [2, 3, 5] representing items sold. Also create a numpy array called prices with values [10, 20, 30] representing price per item.
NumPy
Hint
Use np.array() to create arrays with the exact values given.
2
Define the einsum operation string
Create a string variable called operation and set it to 'i,i->' which tells np.einsum() to multiply elements of two 1D arrays and sum the result.
NumPy
Hint
The string 'i,i->' means multiply elements with index i from both arrays and sum all results.
3
Calculate total sales using np.einsum()
Use np.einsum() with the operation string and arrays quantities and prices to calculate the total sales amount. Store the result in a variable called total_sales.
NumPy
Hint
Call np.einsum() with the operation string and the two arrays in order.
4
Print the total sales amount
Print the variable total_sales to display the total sales amount.
NumPy
Hint
Use print(total_sales) to show the result.
Practice
(1/5)
1. What is the main purpose of np.einsum() in numpy?
easy
A. To perform efficient and readable array operations using Einstein summation notation
B. To create random arrays with specific distributions
C. To sort arrays in ascending order
D. To reshape arrays into different dimensions
Solution
Step 1: Understand the function's goal
np.einsum() uses Einstein summation notation to express complex array operations clearly and efficiently.
Step 2: Compare with other options
Options B, C, and D describe unrelated numpy functions like random generation, sorting, and reshaping.
Final Answer:
To perform efficient and readable array operations using Einstein summation notation -> Option A
Quick Check:
Purpose of np.einsum() = To perform efficient and readable array operations using Einstein summation notation [OK]
Hint: Remember: einsum is for smart, fast array math [OK]
Common Mistakes:
Confusing einsum with random array creation
Thinking einsum sorts or reshapes arrays
Assuming einsum is only for dot products
2. Which of the following is the correct syntax to compute the matrix product of two 2D arrays A and B using np.einsum()?
easy
A. np.einsum('ij,jk->ik', A, B)
B. np.einsum('ik,jk->ij', A, B)
C. np.einsum('ij,ik->jk', A, B)
D. np.einsum('ji,kj->ik', A, B)
Solution
Step 1: Recall matrix multiplication indices
Matrix multiplication of A (shape ixj) and B (shape jxk) results in shape ixk, summing over j.
Step 2: Match einsum subscripts
np.einsum('ij,jk->ik', A, B) uses 'ij,jk->ik', which correctly sums over j and produces ixk output.
Final Answer:
np.einsum('ij,jk->ik', A, B) -> Option A
Quick Check:
Matrix product einsum = np.einsum('ij,jk->ik', A, B) [OK]
Hint: Use 'ij,jk->ik' for matrix multiplication [OK]
Common Mistakes:
Mixing up indices order in the subscript string
Using wrong output indices after ->
Confusing which axis to sum over
3. Given the code:
import numpy as np
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
result = np.einsum('ij,ij->i', A, B)
print(result)
What is the output?
medium
A. [19 43]
B. [17 43]
C. [23 53]
D. [17 53]
Solution
Step 1: Understand the einsum subscripts 'ij,ij->i'
This sums element-wise multiplication over the second index j, keeping the first index i.
Step 2: Calculate for each i
For i=0: (1*5)+(2*6)=5+12=17; For i=1: (3*7)+(4*8)=21+32=53.
Final Answer:
[17 53] -> Option D
Quick Check:
Element-wise sum over j = [17 53] [OK]
Hint: Sum over repeated indices, keep others [OK]
Common Mistakes:
Summing over wrong axis
Confusing output indices in einsum
Calculating element-wise product incorrectly
4. Identify the error in this code snippet:
import numpy as np
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
result = np.einsum('ij,jk->ik', A, B)
print(result)
and choose the correct fix.
medium
A. Ensure B has shape (2, 2) and use 'ij,jk->ik' as is
B. No error; code runs correctly
C. Swap arrays to np.einsum('jk,ij->ik', B, A)
D. Change subscript to 'ij,ik->jk' to match shapes
Solution
Step 1: Check array shapes and einsum subscripts
A and B both have shape (2,2). The subscript 'ij,jk->ik' expects B's first dimension (j) to match A's second dimension (j), which it does.
Step 2: Verify if code runs
Shapes match perfectly for matrix multiplication. No error; the code runs correctly.
Final Answer:
No error; code runs correctly -> Option B
Quick Check:
No error; code runs correctly [OK]
Hint: Check array shapes match einsum indices [OK]
Common Mistakes:
Assuming code errors without checking shapes
Changing subscripts incorrectly
Swapping arrays unnecessarily
5. You have a 3D array data with shape (10, 5, 4) representing 10 samples, 5 features, and 4 time points. Using np.einsum(), how do you compute the sum of products of features and time points for each sample, resulting in a 1D array of length 10?
hard
A. np.einsum('ijk,ijk->k', data, data)
B. np.einsum('ijk,ijk->j', data, data)
C. np.einsum('ijk,ijk->i', data, data)
D. np.einsum('ijk,ijk->ij', data, data)
Solution
Step 1: Understand the dimensions and desired output
Data shape is (samples=10, features=5, time=4). We want to sum over features and time, keeping samples dimension.
Step 2: Use einsum to sum over j and k, keep i
Subscript 'ijk,ijk->i' multiplies element-wise and sums over j and k, resulting in length 10 array.
Final Answer:
np.einsum('ijk,ijk->i', data, data) -> Option C
Quick Check:
Sum over features and time = np.einsum('ijk,ijk->i', data, data) [OK]
Hint: Sum over repeated indices, keep sample index [OK]
Common Mistakes:
Summing over wrong axes
Confusing output indices in einsum
Expecting 2D output instead of 1D
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.