Bird
Raised Fist0
NumPydata~20 mins

Generalized ufuncs concept in NumPy - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Generalized ufuncs Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of a simple generalized ufunc call
What is the output of this code using a generalized ufunc with specified core dimensions?
NumPy
import numpy as np

def my_func(x, y):
    return x + y

my_gufunc = np.frompyfunc(my_func, 2, 1)

x = np.array([[1, 2], [3, 4]])
y = np.array([[10, 20], [30, 40]])

result = my_gufunc(x, y)
print(result)
A
[[1 2]
 [3 4]]
B
[[11 12]
 [13 14]]
C
[[10 20]
 [30 40]]
D
[[11 22]
 [33 44]]
Attempts:
2 left
💡 Hint
Think about what the function does element-wise on the arrays.
❓ data_output
intermediate
1:30remaining
Shape of output from a generalized ufunc with core dimensions
Given the following generalized ufunc call, what is the shape of the output array?
NumPy
import numpy as np

def func(a, b):
    return a * b

my_gufunc = np.frompyfunc(func, 2, 1)

x = np.ones((3, 4))
y = np.ones((3, 4))

result = my_gufunc(x, y)
print(result.shape)
A(4,)
B(4, 3)
C(3, 4)
D(3,)
Attempts:
2 left
💡 Hint
The function is applied element-wise to arrays of the same shape.
🔧 Debug
advanced
2:00remaining
Identify the error in this generalized ufunc definition
What error does this code raise when trying to create a generalized ufunc with core dimensions?
NumPy
import numpy as np

def my_func(x, y):
    return x + y

# Incorrect core dimensions specification
my_gufunc = np.frompyfunc(my_func, 2, 1)

x = np.array([1, 2, 3])
y = np.array([4, 5, 6])

result = my_gufunc(x, y)
print(result)
ANo error, prints [5 7 9]
BValueError: operands could not be broadcast together
CSyntaxError: invalid syntax
DTypeError: frompyfunc does not support core dimensions
Attempts:
2 left
💡 Hint
Check the capabilities of np.frompyfunc regarding core dimensions.
🚀 Application
advanced
2:30remaining
Using a generalized ufunc to compute matrix multiplication
Which option correctly uses a generalized ufunc to perform matrix multiplication on two 2D arrays?
NumPy
import numpy as np

def matmul(a, b):
    return a @ b

# Assume my_gufunc is defined here

A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

result = my_gufunc(A, B)
print(result)
Amy_gufunc = np.vectorize(matmul, signature='(m,n),(n,p)->(m,p)')
Bmy_gufunc = np.frompyfunc(matmul, 2, 1)
Cmy_gufunc = np.frompyfunc(lambda x, y: x * y, 2, 1)
Dmy_gufunc = np.vectorize(matmul)
Attempts:
2 left
💡 Hint
Generalized ufuncs with core dimensions require a signature to specify input/output shapes.
🧠 Conceptual
expert
1:30remaining
Understanding core dimensions in generalized ufuncs
Which statement best describes the role of core dimensions in a generalized ufunc?
ACore dimensions define the output data type of the ufunc.
BCore dimensions specify the fixed dimensions that the ufunc operates on element-wise, while broadcasting over other dimensions.
CCore dimensions are the dimensions that are ignored during the ufunc operation.
DCore dimensions determine the number of input arguments the ufunc accepts.
Attempts:
2 left
💡 Hint
Think about how generalized ufuncs handle arrays with different shapes.

Practice

(1/5)
1. What is the main purpose of a generalized ufunc in numpy?
easy
A. To apply a custom function element-wise on arrays
B. To sort arrays in ascending order
C. To convert arrays into lists
D. To create random numbers

Solution

  1. Step 1: Understand the role of generalized ufuncs

    Generalized ufuncs allow applying custom functions element-wise on arrays, handling multiple inputs and outputs.
  2. Step 2: Compare with other options

    Sorting, converting, or generating random numbers are unrelated to generalized ufuncs.
  3. Final Answer:

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

    Generalized ufunc = element-wise custom function [OK]
Hint: Generalized ufuncs apply functions element-wise on arrays [OK]
Common Mistakes:
  • Confusing generalized ufuncs with sorting functions
  • Thinking they convert arrays to lists
  • Assuming they generate random numbers
2. Which of the following is the correct syntax to create a generalized ufunc from a Python function f that takes 2 inputs and returns 1 output?
easy
A. numpy.frompyfunc(f, 1, 2)
B. numpy.frompyfunc(f, 1)
C. numpy.frompyfunc(f, 2)
D. numpy.frompyfunc(f, 2, 1)

Solution

  1. Step 1: Recall the frompyfunc signature

    The function numpy.frompyfunc requires the Python function, number of inputs, and number of outputs as arguments.
  2. Step 2: Match inputs and outputs

    Since f takes 2 inputs and returns 1 output, the correct call is numpy.frompyfunc(f, 2, 1).
  3. Final Answer:

    numpy.frompyfunc(f, 2, 1) -> Option D
  4. Quick Check:

    Inputs=2, Outputs=1 matches numpy.frompyfunc(f, 2, 1) [OK]
Hint: Remember: frompyfunc(func, inputs, outputs) [OK]
Common Mistakes:
  • Swapping inputs and outputs numbers
  • Omitting required arguments
  • Using incorrect argument counts
3. What is the output of the following code?
import numpy as np

def add_and_subtract(x, y):
    return x + y, x - y

ufunc = np.frompyfunc(add_and_subtract, 2, 2)
x = np.array([3, 5])
y = np.array([1, 2])
result = ufunc(x, y)
print(result)
medium
A. array([4, 7, 2, 3])
B. [4 7 2 3]
C. (array([4, 7], dtype=object), array([2, 3], dtype=object))
D. Error: wrong number of outputs

Solution

  1. Step 1: Understand the function and ufunc creation

    The function returns two outputs: sum and difference. The ufunc is created with 2 inputs and 2 outputs.
  2. Step 2: Apply ufunc on arrays element-wise

    For x=[3,5] and y=[1,2], sum = [4,7], difference = [2,3]. The result is a tuple of arrays with dtype=object.
  3. Final Answer:

    (array([4, 7], dtype=object), array([2, 3], dtype=object)) -> Option C
  4. Quick Check:

    Element-wise sum and difference tuple = (array([4, 7], dtype=object), array([2, 3], dtype=object)) [OK]
Hint: Multi-output ufunc returns tuple of arrays [OK]
Common Mistakes:
  • Expecting a single array output
  • Confusing tuple with list output
  • Ignoring dtype=object in output arrays
4. Identify the error in the following code that tries to create a generalized ufunc:
import numpy as np

def multiply(x, y):
    return x * y

ufunc = np.frompyfunc(multiply, 2, 2)
print(ufunc(3, 4))
medium
A. The function returns 1 output but ufunc expects 2 outputs
B. The function takes 1 input but ufunc expects 2 inputs
C. The function multiply is not defined correctly
D. No error, code runs fine

Solution

  1. Step 1: Check function outputs vs ufunc outputs

    The function multiply returns a single value, but frompyfunc is called with 2 outputs.
  2. Step 2: Understand mismatch consequences

    This mismatch causes an error because the ufunc expects 2 outputs but gets only 1.
  3. Final Answer:

    The function returns 1 output but ufunc expects 2 outputs -> Option A
  4. Quick Check:

    Outputs mismatch causes error = The function returns 1 output but ufunc expects 2 outputs [OK]
Hint: Match function outputs with ufunc outputs count [OK]
Common Mistakes:
  • Ignoring output count mismatch
  • Assuming function input count is wrong
  • Thinking code runs without error
5. You want to create a generalized ufunc that takes an array of numbers and returns two arrays: one with squares and one with cubes of each element. Which of the following implementations correctly achieves this?
hard
A. def sq_and_cube(x, y): return x**2, y**3 ufunc = np.frompyfunc(sq_and_cube, 2, 2)
B. def sq_and_cube(x): return x**2, x**3 ufunc = np.frompyfunc(sq_and_cube, 1, 2)
C. def sq_and_cube(x): return [x**2, x**3] ufunc = np.frompyfunc(sq_and_cube, 1, 1)
D. def sq_and_cube(x): return x**2 + x**3 ufunc = np.frompyfunc(sq_and_cube, 1, 2)

Solution

  1. Step 1: Analyze function inputs and outputs

    The function should take 1 input and return 2 outputs (square and cube).
  2. Step 2: Match function and ufunc signature

    def sq_and_cube(x): return x**2, x**3 ufunc = np.frompyfunc(sq_and_cube, 1, 2) defines a function with 1 input and returns 2 outputs, matching frompyfunc call with inputs=1 and outputs=2.
  3. Step 3: Check other options for errors

    def sq_and_cube(x, y): return x**2, y**3 ufunc = np.frompyfunc(sq_and_cube, 2, 2) takes 2 inputs incorrectly; C returns a single list output; D returns a single value but expects 2 outputs.
  4. Final Answer:

    def sq_and_cube(x): return x**2, x**3 ufunc = np.frompyfunc(sq_and_cube, 1, 2) -> Option B
  5. Quick Check:

    Inputs=1, Outputs=2 match function and ufunc [OK]
Hint: Function outputs count must match ufunc outputs count [OK]
Common Mistakes:
  • Passing wrong number of inputs to function
  • Returning list instead of tuple for multiple outputs
  • Mismatching outputs count in frompyfunc
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