पाठ 2 / 25
Vectorised Maths and Broadcasting
Operate on whole arrays.
Shapes stretch to match
Arithmetic on arrays works element-wise. Broadcasting lets arrays of different shapes combine: dimensions are compared from the right and must be equal or 1, and size-1 dimensions are stretched virtually without copying. A scalar works with any array; a (3,) vector works with each row of a (2, 3) matrix. Reductions take an axis: axis=0 collapses rows (one result per column), axis=1 collapses columns (one result per row).
Tax, order totals and standardisation, run
I ran this with Python 3.12.3 and NumPy 2.5.3. Prices are multiplied by 1.18, a quantity matrix is multiplied row-wise by prices and summed per order, each column is standardised, and incompatible shapes raise a ValueError.
import numpy as np
prices = np.array([100.0, 250.0, 40.0])
print(prices * 1.18) # scalar broadcast to every element
qty = np.array([[1, 2, 0],
[3, 0, 1]]) # 2 orders x 3 products
print(qty * prices) # (2,3) * (3,) -> row-wise
print((qty * prices).sum(axis=1)) # total per order
x = np.array([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])
z = (x - x.mean(axis=0)) / x.std(axis=0) # standardise each column
print(z.round(3))
try:
np.ones((2, 3)) + np.ones((2,))
except ValueError as e:
print("ValueError:", e)
Output:
[118. 295. 47.2] [[100. 500. 0.] [300. 0. 40.]] [600. 340.] [[-1.225 -1.225] [ 0. 0. ] [ 1.225 1.225]] ValueError: operands could not be broadcast together with shapes (2,3) (2,)
Check shapes when results look odd
Print .shape before combining arrays; most surprising results come from an axis you did not intend to broadcast.
त्वरित जाँच: Can a (2, 3) array be added to a (3,) array?
- Yes, the (3,) array is broadcast across each row
- No, shapes must be identical
- Only if both are float
- Only with a loop
Answer
Yes, the (3,) array is broadcast across each row — Trailing dimensions match.