Bird
Raised Fist0
NumPydata~10 mins

np.vectorize() for custom functions in NumPy - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - np.vectorize() for custom functions
Define custom function
↓
Create vectorized function with np.vectorize
↓
Input: array or list
↓
Apply vectorized function element-wise
↓
Output: array with results
You define a function, then use np.vectorize to apply it to each element of an array easily.
Execution Sample
NumPy
import numpy as np

def add_one(x):
    return x + 1

vfunc = np.vectorize(add_one)
result = vfunc([1, 2, 3])
This code adds 1 to each element of the list [1, 2, 3] using np.vectorize.
Execution Table
StepInput ElementFunction CallFunction ResultOutput Array State
11add_one(1)2[2]
22add_one(2)3[2, 3]
33add_one(3)4[2, 3, 4]
4N/AAll elements processedN/A[2, 3, 4]
💡 All input elements processed, vectorized function returns final output array.
Variable Tracker
VariableStartAfter 1After 2After 3Final
input_array[1, 2, 3][1, 2, 3][1, 2, 3][1, 2, 3][1, 2, 3]
output_array[][2][2, 3][2, 3, 4][2, 3, 4]
Key Moments - 2 Insights
Why do we use np.vectorize instead of just a for loop?
np.vectorize lets us write code that looks like it works on arrays directly, making it simpler and cleaner, as shown in the execution_table where the function is applied element-wise automatically.
Does np.vectorize make the function run faster?
No, np.vectorize is mostly for convenience. It still calls the function once per element, like a loop, as seen in each step of the execution_table.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the output array after processing the second element?
A[2, 3]
B[3, 4]
C[1, 2]
D[2]
💡 Hint
Check the Output Array State column at Step 2 in the execution_table.
At which step does the function add_one get called with input 3?
AStep 1
BStep 2
CStep 3
DStep 4
💡 Hint
Look at the Function Call column in the execution_table.
If the input array was [4, 5], how many rows would the execution_table have before exit?
A5
B3
C4
D2
💡 Hint
The table has one row per element plus one exit row, see current table with 3 elements and 4 rows.
Concept Snapshot
np.vectorize(func) creates a vectorized version of func.
It applies func element-wise to arrays or lists.
Use it to simplify applying custom functions to arrays.
It does NOT speed up execution, just convenience.
Returns a new array with results.
Full Transcript
This lesson shows how np.vectorize lets you apply a custom function to each element of an array easily. First, you define your function, like add_one which adds 1 to a number. Then you create a vectorized version using np.vectorize. When you call this vectorized function with an array, it applies your function to each element one by one. The execution table traces each step: input element, function call, result, and how the output array grows. The variable tracker shows input and output arrays at each step. Key moments clarify that np.vectorize is for convenience, not speed. The quiz checks understanding of the output array state and function calls. Finally, the snapshot summarizes how to use np.vectorize for custom functions.

Practice

(1/5)
1. What is the main purpose of np.vectorize() in numpy?
easy
A. To apply a custom function element-wise on numpy arrays without explicit loops
B. To create random numbers in numpy arrays
C. To sort numpy arrays quickly
D. To reshape numpy arrays into different dimensions

Solution

  1. Step 1: Understand the role of np.vectorize()

    np.vectorize() takes a function that works on single values and makes it work on arrays element-wise.
  2. Step 2: Compare with other numpy functions

    It is not used for random number generation, sorting, or reshaping arrays, which are handled by other numpy functions.
  3. Final Answer:

    To apply a custom function element-wise on numpy arrays without explicit loops -> Option A
  4. Quick Check:

    np.vectorize() = element-wise function application [OK]
Hint: Remember: vectorize applies functions element-wise on arrays [OK]
Common Mistakes:
  • Confusing vectorize with random number generation
  • Thinking vectorize reshapes arrays
  • Assuming vectorize sorts arrays
2. Which of the following is the correct way to create a vectorized version of a function f using numpy?
easy
A. vfunc = np.vectorize[f]
B. vfunc = np.vectorize(f)
C. vfunc = np.vectorize.f()
D. vfunc = np.vectorize->f

Solution

  1. Step 1: Recall the syntax of np.vectorize

    The correct syntax is to call np.vectorize as a function with the target function as argument: np.vectorize(f).
  2. Step 2: Check the other options for syntax errors

    Options A, C, and D use incorrect syntax like square brackets, dot notation, or arrows which are invalid in Python.
  3. Final Answer:

    vfunc = np.vectorize(f) -> Option B
  4. Quick Check:

    Correct syntax uses parentheses: np.vectorize(f) [OK]
Hint: Use parentheses, not brackets or dots, with np.vectorize [OK]
Common Mistakes:
  • Using square brackets instead of parentheses
  • Trying to access vectorize as an attribute
  • Using invalid arrow syntax
3. What will be the output of the following code?
import numpy as np
def square_plus_one(x):
    return x**2 + 1
vfunc = np.vectorize(square_plus_one)
arr = np.array([1, 2, 3])
result = vfunc(arr)
print(result)
medium
A. [2 5 10]
B. [1 4 9]
C. [2 3 4]
D. [1 2 3]

Solution

  1. Step 1: Understand the function logic

    The function square_plus_one returns x**2 + 1. For inputs 1, 2, 3, the outputs are 1^2+1=2, 2^2+1=5, 3^2+1=10.
  2. Step 2: Apply vectorized function on array

    Using np.vectorize, the function applies element-wise on the array [1, 2, 3], producing [2, 5, 10].
  3. Final Answer:

    [2 5 10] -> Option A
  4. Quick Check:

    Element-wise square plus one = [2 5 10] [OK]
Hint: Apply function to each element, then collect results [OK]
Common Mistakes:
  • Forgetting to add 1 after squaring
  • Confusing output with input array
  • Assuming vectorize changes function logic
4. Identify the error in this code snippet:
import numpy as np
def add_five(x):
    return x + 5
vfunc = np.vectorize(add_five)
arr = [1, 2, 3]
result = vfunc(arr)
print result
medium
A. np.vectorize cannot be used with functions that add numbers
B. The function add_five should return x * 5 instead of x + 5
C. The print statement is missing parentheses
D. The input array should be a numpy array, not a list

Solution

  1. Step 1: Check the print statement syntax

    In Python 3, print is a function and requires parentheses like print(result). print result causes a SyntaxError.
  2. Step 2: Verify other parts of the code

    The function logic is correct, np.vectorize works fine with addition functions, and input lists are accepted by np.vectorize.
  3. Final Answer:

    The print statement is missing parentheses -> Option C
  4. Quick Check:

    print requires parentheses in Python 3 [OK]
Hint: print requires parentheses in Python 3 [OK]
Common Mistakes:
  • Forgetting parentheses on print statement
  • Assuming list input is invalid for vectorize
  • Changing function logic unnecessarily
5. You want to apply a custom function that returns 'even' if a number is even and 'odd' if it is odd, on a numpy array. Which code correctly uses np.vectorize() to achieve this?
def even_odd(x):
    if x % 2 == 0:
        return 'even'
    else:
        return 'odd'
arr = np.array([1, 2, 3, 4])
# What next?
hard
A. result = np.apply_along_axis(even_odd, 1, arr) print(result)
B. result = even_odd(arr) print(result)
C. vfunc = np.vectorize(even_odd) result = even_odd(arr.tolist()) print(result)
D. vfunc = np.vectorize(even_odd) result = vfunc(arr) print(result)

Solution

  1. Step 1: Vectorize the custom function

    Use np.vectorize(even_odd) to create a vectorized version that works element-wise on arrays.
  2. Step 2: Apply vectorized function on numpy array

    Call the vectorized function with the numpy array arr to get the result array of 'even'/'odd' strings.
  3. Step 3: Check other options

    result = even_odd(arr) print(result) fails because even_odd does not support array input directly. vfunc = np.vectorize(even_odd) result = even_odd(arr.tolist()) print(result) fails because even_odd does not support list input. result = np.apply_along_axis(even_odd, 1, arr) print(result) fails with axis out of bounds for 1D array.
  4. Final Answer:

    vfunc = np.vectorize(even_odd) result = vfunc(arr) print(result) -> Option D
  5. Quick Check:

    Vectorize then apply on numpy array = vfunc = np.vectorize(even_odd) result = vfunc(arr) print(result) [OK]
Hint: Vectorize first, then apply on numpy array directly [OK]
Common Mistakes:
  • Calling function directly on array without vectorize
  • Calling non-vectorized function on list input
  • Using invalid axis in apply_along_axis
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard