ufunc Methods

Every NumPy universal function carries extra methods — reduce , accumulate , outer , reduceat , and at — that reshape how the operation is applied across an array.

Learn ufunc Methods in our free NumPy course — a beginner-friendly interactive lesson with worked examples, a practice exercise and a quick reference.

Part of the free Numpy course at LearnCodingFast — hands-on lessons with examples you run in your browser, plus practice exercises and a quick quiz.

You'll collapse arrays to a single value, build running totals, form outer products of every pair, reduce over custom slices, and scatter-add repeated indices in place — all from one operation.

ufunc.reduce applies the operation across an array to collapse it to a single value: np.add.reduce sums, np.multiply.reduce multiplies, np.maximum.reduce finds the max. ufunc.accumulate keeps every intermediate result, so np.add.accumulate is a running total. Pass axis to reduce along rows or columns of a 2D array.

ufunc.outer(x, y) applies the operation to every pair of elements, producing a 2D grid of shape (len(x), len(y)) . np.multiply.outer is the classic outer product; np.add.outer builds an addition table.

ufunc.reduceat(a, indices) reduces over the slices defined by the index list — a fast way to sum segments of a flat array. ufunc.at(a, indices, value) performs an unbuffered, in-place update; unlike a[idx] += 1 , it correctly applies every repeated index (a scatter-add).

If you had written arr[idx] += 1 instead, the duplicate indices would each add only once — exactly the bug np.add.at exists to prevent.

Replace each ___ so the program sums an array and then builds its running total.

Expected output: 20 then [ 2 6 12 20] . (Answers: reduce , accumulate .)

Buffered fancy indexing only adds once per unique index, undercounting duplicates.

✅ Fix: use np.add.at(a, idx, 1) for a correct unbuffered scatter-add.

Without axis , reduce collapses the whole array to one number.

✅ Fix: pass axis=0 (down columns) or axis=1 (across rows) to keep the dimension you want.

Build a price-by-quantity table with multiply.outer , then count repeated event codes with add.at .

Lesson complete — ufunc methods unlocked!

You can now collapse arrays with reduce , build running totals with accumulate , form grids with outer , segment with reduceat , and scatter-add safely with add.at .

🚀 Up next: Statistics — percentile, median, std, and var with the axis argument.

Practice quiz

What does np.add.reduce([1, 2, 3, 4, 5]) return?

  • 15

Answer: 15. reduce collapses the array to a single value: 1+2+3+4+5 = 15.

What does np.add.accumulate([1, 2, 3, 4, 5]) return?

  • 15
  • 5

accumulate keeps every running total.

What does np.multiply.reduce([1, 2, 3, 4, 5]) return?

  • 15
  • 120

Answer: 120. multiply.reduce gives the product 1*2*3*4*5 = 120.

What does ufunc.outer(x, y) produce?

  • A single scalar
  • A 1D array
  • A 2D grid combining every pair
  • The element-wise sum

Answer: A 2D grid combining every pair. outer applies the op to every pair, making a (len(x), len(y)) grid.

What shape does np.multiply.outer(x, y) have for len(x)=3, len(y)=2?

  • (3, 2)
  • (2, 3)
  • (6,)
  • (5,)

Answer: (3, 2). outer produces shape (len(x), len(y)) = (3, 2).

What does np.add.reduceat(np.arange(8), [0, 2, 5]) return?

It sums slices [0:2], [2:5], [5:] -> 1, 9, 18.

Why use np.add.at(arr, idx, 1) instead of arr[idx] += 1?

  • It is shorter to type
  • It is unbuffered, so it counts every repeated index
  • It sorts the array
  • It returns a new array

Answer: It is unbuffered, so it counts every repeated index. np.add.at is unbuffered and correctly applies duplicate indices.

What does np.add.reduce(m, axis=0) do on a 2D array?

  • Sums everything to one number
  • Sums across each row
  • Transposes m
  • Sums down each column

Answer: Sums down each column. axis=0 reduces down columns, summing each column.

Which ufunc method gives a running total?

  • reduce
  • outer
  • at
  • accumulate

Answer: accumulate. accumulate keeps every intermediate result, a running total.

np.add.reduce(a) gives the same result as which function?

  • np.prod(a)
  • np.sum(a)
  • np.cumsum(a)
  • np.max(a)

Answer: np.sum(a). np.sum is essentially a friendly wrapper around np.add.reduce.