Broadcasting helps us multiply arrays of different shapes easily. It lets us find outer products without writing loops.
Broadcasting for outer products in NumPy
import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5]) # Reshape a to a column vector and b to a row vector outer_product = a[:, np.newaxis] * b # or use np.outer(a, b) for the same result
Adding np.newaxis changes the shape to allow broadcasting.
Broadcasting automatically expands arrays to compatible shapes.
import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5]) outer = a[:, np.newaxis] * b print(outer)
import numpy as np a = np.array([1, 2]) b = np.array([3, 4, 5]) outer = np.outer(a, b) print(outer)
This program shows two ways to compute the outer product of two arrays. First, it reshapes one array to a column and multiplies by the other array using broadcasting. Then, it uses numpy's built-in outer function. Both give the same result.
import numpy as np # Define two arrays x = np.array([2, 4, 6]) y = np.array([1, 3]) # Compute outer product using broadcasting outer_product = x[:, np.newaxis] * y print('Outer product using broadcasting:') print(outer_product) # Compute outer product using numpy's outer function outer_function = np.outer(x, y) print('\nOuter product using np.outer:') print(outer_function)
Broadcasting works when one array can be 'stretched' to match the other's shape.
Using np.newaxis is a simple way to add a dimension for broadcasting.
np.outer is a convenient shortcut for outer products.
Broadcasting lets you multiply arrays of different shapes without loops.
Use np.newaxis to reshape arrays for broadcasting.
np.outer is a quick way to get outer products.
Practice
Solution
Step 1: Understand broadcasting concept
Broadcasting lets NumPy perform operations on arrays of different shapes by expanding the smaller array's shape without copying data.Step 2: Identify what broadcasting enables
This means you can do element-wise operations without writing loops explicitly.Final Answer:
Perform element-wise operations without explicit loops by automatically expanding shapes -> Option BQuick Check:
Broadcasting = element-wise operations without loops [OK]
- Thinking broadcasting converts arrays to lists
- Confusing broadcasting with sorting
- Assuming broadcasting creates new zero arrays
a to a column vector for broadcasting?Solution
Step 1: Understand reshaping to column vector
A column vector has shape (n, 1). Usingnp.newaxisadds a new axis.a[:, np.newaxis]converts shape (n,) to (n,1).Step 2: Check other options
a.reshape(1, -1)makes a row vector (1, n).a[np.newaxis, :]also makes a row vector.a.flatten()flattens array to 1D, no new axis.Final Answer:
a[:, np.newaxis] -> Option CQuick Check:
Column vector = a[:, np.newaxis] [OK]
- Using reshape(1, -1) creates a row, not column
- Confusing row and column vector shapes
- Using flatten removes dimensions instead of adding
import numpy as np x = np.array([1, 2]) y = np.array([3, 4, 5]) result = x[:, np.newaxis] * y print(result)
Solution
Step 1: Reshape x for broadcasting
x[:, np.newaxis]changes x from shape (2,) to (2,1): [[1], [2]].Step 2: Multiply with y
y has shape (3,), broadcasted to (1,3): [3,4,5]. Multiplying (2,1) * (1,3) results in (2,3) array:
[[1*3, 1*4, 1*5],
[2*3, 2*4, 2*5]] = [[3,4,5],[6,8,10]]Final Answer:
[[3 4 5] [6 8 10]] -> Option DQuick Check:
Outer product shape (2,3) = [[3 4 5], [6 8 10]] [OK]
- Not reshaping x, causing shape mismatch
- Confusing row and column broadcasting
- Expecting 1D output instead of 2D
a and b. What is the error?import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5]) result = a * b print(result)
Solution
Step 1: Check shapes of a and b
a has shape (3,), b has shape (2,). They cannot be multiplied element-wise directly because shapes differ and are not broadcast-compatible.Step 2: Identify error cause
Multiplying arrays of incompatible shapes without reshaping causes a ValueError for shape mismatch.Final Answer:
Shape mismatch error because arrays have incompatible shapes for element-wise multiplication -> Option AQuick Check:
Shape mismatch error = incompatible shapes [OK]
- Assuming arrays multiply element-wise without matching shapes
- Thinking code has syntax errors
- Expecting scalar output from array multiplication
x = np.array([1, 2, 3]) and y = np.array([4, 5]) using broadcasting without explicit loops. Which code snippet correctly does this and produces a (3, 2) shaped result?Solution
Step 1: Understand shapes and broadcasting
x has shape (3,), y has shape (2,). To get outer product shape (3,2), reshape x to (3,1) and multiply by y (2,) broadcasted to (1,2).Step 2: Evaluate options
np.multiply.outer(x, y) does exist as a function but returns a (3,2) array; however, the question asks for broadcasting without explicit loops and np.multiply.outer is a function call, not broadcasting syntax. np.dot(x, y) computes dot product, resulting in scalar. x * y[:, np.newaxis] reshapes y to (2,1), resulting in (3,) * (2,1) which broadcasts to (2,3) (swapped dimensions), not (3,2). x[:, np.newaxis] * y reshapes x to (3,1) and multiplies by y, producing (3,2).Final Answer:
x[:, np.newaxis] * y -> Option AQuick Check:
Broadcast x to (3,1) and multiply y (2,) = (3,2) [OK]
- Using np.dot instead of element-wise multiplication
- Confusing np.multiply.outer with broadcasting syntax
- Swapping axes by reshaping wrong array
Ready to prove it?
Pass the test and this pattern moves unknown
