Bird
Raised Fist0
NumPydata~20 mins

np.frompyfunc() for ufunc creation in NumPy - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
np.frompyfunc Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of a simple ufunc created with np.frompyfunc()
What is the output of this code snippet that creates a ufunc to add 10 to each element?
NumPy
import numpy as np

def add_ten(x):
    return x + 10

ufunc_add_ten = np.frompyfunc(add_ten, 1, 1)
result = ufunc_add_ten(np.array([1, 2, 3]))
print(result)
ATypeError
B[1 2 3 10]
C[11 12 13]
D['11' '12' '13']
Attempts:
2 left
💡 Hint
np.frompyfunc returns an object array by default.
❓ data_output
intermediate
2:00remaining
Result shape and type from a ufunc with multiple outputs
Given this ufunc that returns two values per input, what is the shape and type of the output when applied to a 1D array of length 3?
NumPy
import numpy as np

def square_and_cube(x):
    return x**2, x**3

ufunc_sc = np.frompyfunc(square_and_cube, 1, 2)
result = ufunc_sc(np.array([2, 3, 4]))
print(type(result))
print(len(result))
print(result[0])
AType: tuple, Length: 2, First element: [4 9 16]
BTypeError
CType: tuple, Length: 2, First element: [4 9 16] as object array
DType: numpy.ndarray, Length: 3, First element: 4
Attempts:
2 left
💡 Hint
np.frompyfunc returns object arrays even for multiple outputs.
🔧 Debug
advanced
2:00remaining
Identify the error in ufunc creation with np.frompyfunc()
What error will this code raise and why?
NumPy
import numpy as np

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

ufunc_faulty = np.frompyfunc(faulty_func, 1, 1)
ATypeError: Number of input arguments does not match function signature
BNo error, ufunc created successfully
CValueError: Invalid number of inputs for frompyfunc
DSyntaxError
Attempts:
2 left
💡 Hint
Check the number of input arguments specified vs the function definition.
🚀 Application
advanced
2:00remaining
Using np.frompyfunc() to vectorize a string operation
You want to create a ufunc that converts strings to uppercase. Which option correctly creates and applies this ufunc to a numpy array of strings?
NumPy
import numpy as np

# Your code here

result = ufunc_upper(np.array(['apple', 'banana', 'cherry']))
print(result)
Aufunc_upper = np.frompyfunc(lambda s: s.upper(), 1, 1)
Bufunc_upper = np.frompyfunc(str.upper, 1, 1)
Cufunc_upper = np.frompyfunc(lambda s: s.upper, 1, 1)
Dufunc_upper = np.frompyfunc(lambda s: s.upper, 0, 1)
Attempts:
2 left
💡 Hint
Remember to call the method with parentheses to execute it.
🧠 Conceptual
expert
2:00remaining
Understanding output types of np.frompyfunc() ufuncs
Which statement about the output of ufuncs created with np.frompyfunc() is TRUE?
AThey return object arrays regardless of input types, because they wrap Python functions.
BThey always return numpy arrays with the same dtype as the input arrays.
CThey return lists instead of numpy arrays.
DThey return arrays with dtype inferred from the function's return type.
Attempts:
2 left
💡 Hint
np.frompyfunc wraps Python functions and cannot infer fixed dtypes.

Practice

(1/5)
1. What is the main purpose of np.frompyfunc() in NumPy?
easy
A. To create a new NumPy array from a Python list
B. To convert a regular Python function into a NumPy universal function (ufunc) for element-wise operations
C. To perform matrix multiplication on arrays
D. To convert a NumPy array into a Python list

Solution

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

    This function takes a normal Python function and turns it into a ufunc, which can apply the function element-wise on arrays.
  2. Step 2: Compare with other options

    Options A, C, and D describe other unrelated NumPy operations, not the purpose of np.frompyfunc().
  3. Final Answer:

    To convert a regular Python function into a NumPy universal function (ufunc) for element-wise operations -> Option B
  4. Quick Check:

    np.frompyfunc() creates ufuncs = B [OK]
Hint: Remember: frompyfunc makes Python functions work on arrays [OK]
Common Mistakes:
  • Confusing np.frompyfunc() with array creation functions
  • Thinking it performs matrix operations
  • Assuming it converts arrays to lists
2. Which of the following is the correct syntax to create a ufunc from a Python function f that takes 2 inputs and returns 1 output using np.frompyfunc()?
easy
A. np.frompyfunc(f, 2, 1)
B. np.frompyfunc(f, 1, 2)
C. np.frompyfunc(f, 1)
D. np.frompyfunc(f)

Solution

  1. Step 1: Understand np.frompyfunc() parameters

    The function signature is np.frompyfunc(func, nin, nout), where nin = number of inputs, nout = number of outputs.
  2. Step 2: Match parameters to the function f

    Since f takes 2 inputs and returns 1 output, nin=2 and nout=1, so np.frompyfunc(f, 2, 1) is correct.
  3. Final Answer:

    np.frompyfunc(f, 2, 1) -> Option A
  4. Quick Check:

    nin=2, nout=1 for f = A [OK]
Hint: nin = inputs, nout = outputs in np.frompyfunc() [OK]
Common Mistakes:
  • Swapping input and output counts
  • Omitting required parameters
  • Using only one parameter instead of two
3. What will be the output of the following code?
import numpy as np

def add_mul(x, y):
    return x + y, x * y

ufunc = np.frompyfunc(add_mul, 2, 2)
arr1 = np.array([1, 2])
arr2 = np.array([3, 4])
result = ufunc(arr1, arr2)
print(result)
medium
A. TypeError: unsupported operand type(s)
B. array([4, 6, 3, 8])
C. array([[4, 6], [3, 8]])
D. (array([4, 6], dtype=object), array([3, 8], dtype=object))

Solution

  1. Step 1: Understand the function and ufunc creation

    The function add_mul returns two outputs: sum and product. np.frompyfunc creates a ufunc with 2 inputs and 2 outputs.
  2. Step 2: Apply ufunc element-wise on arrays

    For arr1=[1,2] and arr2=[3,4], element-wise sum is [4,6], product is [3,8]. The result is a tuple of two arrays with dtype=object.
  3. Final Answer:

    (array([4, 6], dtype=object), array([3, 8], dtype=object)) -> Option D
  4. Quick Check:

    Element-wise sum and product tuple = A [OK]
Hint: ufunc returns tuple of arrays if nout > 1 [OK]
Common Mistakes:
  • Expecting a single array instead of tuple
  • Confusing output shape or type
  • Ignoring dtype=object for frompyfunc outputs
4. Identify the error in the following code snippet:
import numpy as np

def square(x):
    return x**2

ufunc = np.frompyfunc(square, 1, 1)
arr = np.array([1, 2, 3])
result = ufunc(arr, arr)
print(result)
medium
A. The function square should take two inputs, not one
B. np.frompyfunc() is called with wrong number of outputs
C. Calling ufunc with two arrays but function expects one input
D. No error, code runs correctly

Solution

  1. Step 1: Check function signature and ufunc creation

    The function square takes 1 input and returns 1 output. np.frompyfunc is called with nin=1, nout=1, which is correct.
  2. Step 2: Analyze ufunc call with arguments

    The ufunc is called with two arguments (arr, arr), but it expects only one input array because nin=1. This causes a TypeError.
  3. Final Answer:

    Calling ufunc with two arrays but function expects one input -> Option C
  4. Quick Check:

    Mismatch in ufunc call arguments = D [OK]
Hint: Match ufunc inputs with function parameters when calling [OK]
Common Mistakes:
  • Passing wrong number of arguments to ufunc
  • Confusing nin and nout in frompyfunc
  • Assuming no error when argument count mismatches
5. You want to create a ufunc that takes a list of strings and returns their lengths and first characters as two outputs. Which code correctly creates and applies this ufunc to np.array(['apple', 'banana'])?
hard
A. def f(s): return len(s), s[0] ufunc = np.frompyfunc(f, 1, 2) result = ufunc(np.array(['apple', 'banana']))
B. def f(s): return len(s), s[0] ufunc = np.frompyfunc(f, 2, 1) result = ufunc(np.array(['apple', 'banana']))
C. def f(s1, s2): return len(s1), s2[0] ufunc = np.frompyfunc(f, 1, 2) result = ufunc(np.array(['apple', 'banana']))
D. def f(s): return len(s), s[0] ufunc = np.frompyfunc(f, 1, 2) result = ufunc(['apple', 'banana'], ['orange', 'pear'])

Solution

  1. Step 1: Define function and ufunc parameters

    The function f takes 1 input string and returns 2 outputs: length and first character. So nin=1, nout=2.
  2. Step 2: Check ufunc creation and application

    def f(s): return len(s), s[0] ufunc = np.frompyfunc(f, 1, 2) result = ufunc(np.array(['apple', 'banana'])) correctly creates ufunc with np.frompyfunc(f, 1, 2) and applies it to a single array of strings.
  3. Step 3: Verify other options

    def f(s): return len(s), s[0] ufunc = np.frompyfunc(f, 2, 1) result = ufunc(np.array(['apple', 'banana'])) has wrong nout=1, def f(s1, s2): return len(s1), s2[0] ufunc = np.frompyfunc(f, 1, 2) result = ufunc(np.array(['apple', 'banana'])) has wrong nin=1 but function takes 2 inputs, def f(s): return len(s), s[0] ufunc = np.frompyfunc(f, 1, 2) result = ufunc(['apple', 'banana'], ['orange', 'pear']) passes two arrays but function expects one input.
  4. Final Answer:

    def f(s): return len(s), s[0] ufunc = np.frompyfunc(f, 1, 2) result = ufunc(np.array(['apple', 'banana'])) -> Option A
  5. Quick Check:

    Function input/output match ufunc params = C [OK]
Hint: Match function inputs/outputs with frompyfunc nin/nout [OK]
Common Mistakes:
  • Mixing input and output counts
  • Passing multiple arrays when function expects one
  • Incorrect function signature for ufunc creation
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