Python Central HubSign in

Data Analytics with Python / Phase 2: Numerical Computing NumPy

NumPy Universal Functions (ufuncs)

Learn NumPy ufuncs like sqrt, exp, log, sin, and how they speed up vectorized computations.

What are ufuncs?

A ufunc (universal function) is a function that performs element-wise operations on data in ndarrays. Think of them as fast, vectorized wrappers around simple functions that would otherwise take one scalar in and return one scalar out.

Examples:

  • np.sqrt, np.exp, np.log
  • np.sin, np.cos
  • np.maximum, np.minimum

They are faster and cleaner than Python loops.

Example: sqrt

Python
import numpy as np
 
arr = np.array([1, 4, 9, 16])
print(np.sqrt(arr))

Unary vs binary ufuncs

diagram Unary vs binary ufuncs mermaid
Unary ufuncs transform one array; binary ufuncs combine two arrays element-wise into one result.

np.sqrt and np.exp are unary ufuncs — they take one array. Functions like np.add or np.maximum are binary — they take two arrays and return one result.

Common math ufuncs

Python
import numpy as np
 
x = np.array([1.0, 2.0, 3.0])
print(np.exp(x))
print(np.log(x))
print(np.log10(x))

Trigonometric ufuncs

Python
import numpy as np
 
angles = np.array([0, np.pi/2, np.pi])
print(np.sin(angles))
print(np.cos(angles))

Comparison ufuncs

Python
import numpy as np
 
a = np.array([1, 10, 3])
b = np.array([2, 5, 4])
 
print(np.maximum(a, b))
print(np.minimum(a, b))

A ufunc that returns two arrays

Most ufuncs return one array, but a few — like np.modf — return more than one. It splits a float array into fractional and whole-number parts:

Python
import numpy as np
 
arr = np.array([4.5, -8.1, 2.25])
remainder, whole_part = np.modf(arr)
print("remainder:", remainder)
print("whole:", whole_part)

Writing results into an existing array

Ufuncs accept an optional out argument to write results in place instead of allocating a new array — handy for saving memory on large arrays.

Python
import numpy as np
 
arr = np.array([1.0, 2.0, 3.0])
result = np.zeros_like(arr)
np.add(arr, 1, out=result)
print(result)

Working with NaN values

Some ufuncs have NaN-safe variants.

Python
import numpy as np
 
arr = np.array([1.0, np.nan, 3.0])
print(np.nanmean(arr))
print(np.nansum(arr))

Ufuncs + broadcasting

Ufuncs naturally work with broadcasting.

Python
import numpy as np
 
mat = np.array([[1, 2, 3], [4, 5, 6]])
print(np.sqrt(mat))

Check your understanding

quizCheck yourself
  1. What is a ufunc?

    Show answer

    A — A function that applies an operation element-wise to ndarray data — Ufuncs like np.sqrt and np.exp are fast, vectorized functions that work element by element.

  2. For a = np.array([1, 10, 3]) and b = np.array([2, 5, 4]), what does np.maximum(a, b) return?

    Show answer

    A — [2 10 4] — np.maximum is a binary ufunc that keeps the larger value at each position: 2, 10 and 4.

  3. What does np.nanmean(np.array([1.0, np.nan, 3.0])) return?

    Show answer

    B — 2.0 — nanmean ignores the NaN, so it averages 1.0 and 3.0 to get 2.0. A plain mean would return nan.

  4. What does the out argument do in np.add(arr, 1, out=result)?

    Show answer

    B — Writes the result into the existing array result instead of allocating a new one — out writes in place, which saves memory on large arrays.

Next

Continue to: Stacking and Splitting Arrays to combine and break arrays along different axes.

🧪 Try It Yourself

Exercise 1 – Apply a Unary ufunc

exerciseYour turn

Tab indents. Press Escape, then Tab, to leave the editor. Control plus Enter runs the code; Control plus Shift plus Enter submits it.

Output
Press Run to see what your code prints.

Exercise 2 – A Binary ufunc

exerciseYour turn

Tab indents. Press Escape, then Tab, to leave the editor. Control plus Enter runs the code; Control plus Shift plus Enter submits it.

Output
Press Run to see what your code prints.

Exercise 3 – NaN-safe Aggregation

exerciseYour turn

Tab indents. Press Escape, then Tab, to leave the editor. Control plus Enter runs the code; Control plus Shift plus Enter submits it.

Output
Press Run to see what your code prints.

Was this page helpful?

Let us know how we did