It creates a universal function (ufunc) from a regular Python function, allowing element-wise operations on NumPy arrays.
Click to reveal answer
beginner
What are the required arguments for np.frompyfunc()?
You need to provide the Python function, the number of input arguments it takes, and the number of outputs it returns.
Click to reveal answer
intermediate
Why use np.frompyfunc() instead of a simple Python loop?
Because ufuncs created by np.frompyfunc() can apply the function element-wise on arrays efficiently and support broadcasting.
Click to reveal answer
intermediate
What is the difference between np.vectorize() and np.frompyfunc()?
np.vectorize() is a convenience wrapper that is slower and returns arrays with native dtypes, while np.frompyfunc() creates a true ufunc that returns object arrays and supports multiple outputs.
Click to reveal answer
beginner
What type of array does a ufunc created by np.frompyfunc() return?
It returns an array of type object, because the ufunc wraps a Python function that can return any Python object.
Click to reveal answer
What does the second argument of np.frompyfunc(func, nin, nout) specify?
ANumber of elements in the input array
BNumber of output arguments the function returns
CData type of the output
DNumber of input arguments the function takes
✗ Incorrect
The second argument nin specifies how many input arguments the Python function takes.
What type of array does a ufunc created by np.frompyfunc() return?
AInteger array
BFloat array
CObject array
DBoolean array
✗ Incorrect
Ufuncs created by np.frompyfunc() return arrays of type object.
Which of these is a benefit of using np.frompyfunc()?
AIt allows element-wise application of Python functions on arrays
BIt automatically compiles Python code to C
CIt converts arrays to lists
DIt only works with scalar values
✗ Incorrect
np.frompyfunc() creates ufuncs that apply Python functions element-wise on arrays.
How many outputs can a function wrapped by np.frompyfunc() return?
AZero outputs
BMultiple outputs
COnly one output
DOutputs must be numeric only
✗ Incorrect
You can specify multiple outputs by setting nout to more than one.
Which statement is true about np.vectorize() compared to np.frompyfunc()?
B<code>np.frompyfunc()</code> is slower than <code>np.vectorize()</code>
C<code>np.vectorize()</code> returns arrays with native dtypes
D<code>np.vectorize()</code> creates a true ufunc
✗ Incorrect
np.frompyfunc() creates ufuncs that return object arrays, while np.vectorize() returns arrays with native dtypes but is slower.
Explain how np.frompyfunc() helps apply a Python function to each element of a NumPy array.
Think about how normal Python functions work on single values and how ufuncs extend that to arrays.
You got /4 concepts.
Describe the difference between np.frompyfunc() and np.vectorize() in terms of output and performance.
Consider what kind of arrays each returns and how they handle multiple outputs.
You got /4 concepts.
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
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.
Step 2: Compare with other options
Options A, C, and D describe other unrelated NumPy operations, not the purpose of np.frompyfunc().
Final Answer:
To convert a regular Python function into a NumPy universal function (ufunc) for element-wise operations -> Option B
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
Step 1: Understand np.frompyfunc() parameters
The function signature is np.frompyfunc(func, nin, nout), where nin = number of inputs, nout = number of outputs.
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.
Final Answer:
np.frompyfunc(f, 2, 1) -> Option A
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
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.
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.
Final Answer:
(array([4, 6], dtype=object), array([3, 8], dtype=object)) -> Option D
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:
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
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.
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.
Final Answer:
Calling ufunc with two arrays but function expects one input -> Option C
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
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.
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.
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.
Final Answer:
def f(s): return len(s), s[0]
ufunc = np.frompyfunc(f, 1, 2)
result = ufunc(np.array(['apple', 'banana'])) -> Option A
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 unknownstrongwhile earning +1 Grip toward your certificate.