Bird
Raised Fist0
NumPydata~20 mins

Why structured arrays matter in NumPy - Challenge Your Understanding

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Challenge - 5 Problems
🎖️
Structured Arrays Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of accessing fields in a structured array
What is the output of this code that creates a structured array and accesses one field?
NumPy
import numpy as np

arr = np.array([(1, 2.5), (3, 4.5)], dtype=[('x', 'i4'), ('y', 'f4')])
print(arr['y'])
A[2.5 4.5]
B[1 3]
C[2 4]
DTypeError
Attempts:
2 left
💡 Hint
Look at the dtype and which field is accessed.
❓ data_output
intermediate
1:30remaining
Number of elements in a structured array
How many elements does this structured array contain?
NumPy
import numpy as np

arr = np.array([(10, 20), (30, 40), (50, 60)], dtype=[('a', 'i4'), ('b', 'i4')])
print(len(arr))
A6
B3
C2
DTypeError
Attempts:
2 left
💡 Hint
Count the number of tuples in the array.
🔧 Debug
advanced
2:00remaining
Error when mixing data types in structured array
What error does this code raise when trying to create a structured array with inconsistent field data types?
NumPy
import numpy as np

arr = np.array([(1, 'a'), (2, 3)], dtype=[('num', 'i4'), ('char', 'U1')])
ATypeError
BIndexError
CValueError
DNo error
Attempts:
2 left
💡 Hint
Check if all tuples match the dtype specification.
🚀 Application
advanced
2:30remaining
Selecting records based on a field condition
Given a structured array of people with fields 'name' and 'age', which option correctly selects all records where age is greater than 30?
NumPy
import numpy as np

people = np.array([('Alice', 25), ('Bob', 35), ('Carol', 40)], dtype=[('name', 'U10'), ('age', 'i4')])
Apeople[people['age'] > 30]
Bpeople[people['name'] > 30]
Cpeople[people['age'] < 30]
Dpeople[people['age'] == '30']
Attempts:
2 left
💡 Hint
Compare the 'age' field with 30 using a greater than operator.
🧠 Conceptual
expert
3:00remaining
Why use structured arrays instead of regular arrays?
Which reason best explains why structured arrays are important in data science?
AThey only store strings efficiently.
BThey are faster than all other numpy arrays for numerical computations.
CThey automatically visualize data without extra code.
DThey allow storing multiple named fields with different data types in one array, enabling easy access and manipulation of heterogeneous data.
Attempts:
2 left
💡 Hint
Think about handling data with different types in one structure.

Practice

(1/5)
1. What is the main advantage of using numpy structured arrays?
easy
A. They automatically visualize data.
B. They only store integers efficiently.
C. They replace Python lists completely.
D. They allow storing different data types in one array with named fields.

Solution

  1. Step 1: Understand structured arrays

    Structured arrays let you store multiple data types together, like numbers and text, in one array with named fields.
  2. Step 2: Compare options

    Only They allow storing different data types in one array with named fields. correctly describes this main advantage. Others are incorrect or unrelated.
  3. Final Answer:

    They allow storing different data types in one array with named fields. -> Option D
  4. Quick Check:

    Structured arrays = multiple types + named fields [OK]
Hint: Remember: structured arrays hold mixed data types by field names [OK]
Common Mistakes:
  • Thinking structured arrays only hold one data type
  • Confusing structured arrays with visualization tools
  • Assuming structured arrays replace all Python lists
2. Which of the following is the correct way to define a structured array with fields 'name' (string) and 'age' (integer)?
easy
A. np.array([('Alice', 25), ('Bob', 30)], dtype=[('name', 'int'), ('age', 'float')])
B. np.array([(b'Alice', 25), (b'Bob', 30)], dtype=[('name', 'S10'), ('age', 'i4')])
C. np.array([('Alice', 25), ('Bob', 30)], dtype=[('age', 'i4'), ('name', 'S10')])
D. np.array(['Alice', 25, 'Bob', 30], dtype=[('name', 'S10'), ('age', 'i4')])

Solution

  1. Step 1: Check data and dtype match

    np.array([(b'Alice', 25), (b'Bob', 30)], dtype=[('name', 'S10'), ('age', 'i4')]) correctly uses byte strings for names and integer type for age, matching the dtype fields.
  2. Step 2: Identify errors in other options

    B uses wrong types ('int' for name, 'float' for age); C passes string first ('Alice') to 'age' ('i4'), causing type mismatch; D passes a flat list instead of tuples.
  3. Final Answer:

    np.array([(b'Alice', 25), (b'Bob', 30)], dtype=[('name', 'S10'), ('age', 'i4')]) -> Option B
  4. Quick Check:

    Correct dtype and data tuple format = np.array([(b'Alice', 25), (b'Bob', 30)], dtype=[('name', 'S10'), ('age', 'i4')]) [OK]
Hint: Match data tuples exactly to dtype field order and types [OK]
Common Mistakes:
  • Using wrong data types for fields
  • Passing flat lists instead of tuples
  • Mixing field order between data and dtype
3. What will be the output of this code?
import numpy as np
arr = np.array([(1, 2.5), (3, 4.5)], dtype=[('x', 'i4'), ('y', 'f4')])
print(arr['y'])
medium
A. [2.5 4.5]
B. [1 3]
C. [2 4]
D. Error: No field named 'y'

Solution

  1. Step 1: Understand structured array fields

    The array has fields 'x' (integers) and 'y' (floats). Accessing arr['y'] returns all values in 'y' field.
  2. Step 2: Check printed output

    Values in 'y' are 2.5 and 4.5, so output is array([2.5, 4.5]).
  3. Final Answer:

    [2.5 4.5] -> Option A
  4. Quick Check:

    arr['y'] = [2.5 4.5] [OK]
Hint: Access fields by name to get that column's values [OK]
Common Mistakes:
  • Confusing field names and indexes
  • Expecting error when field exists
  • Misreading float values as integers
4. Identify the error in this code snippet:
import numpy as np
arr = np.array([(1, 'Alice'), (2, 'Bob')], dtype=[('id', 'i4'), ('name', 'S10')])
print(arr['age'])
medium
A. Tuple data format is wrong.
B. Data types in dtype are incorrect.
C. Field 'age' does not exist in the structured array.
D. Array creation syntax is invalid.

Solution

  1. Step 1: Check dtype fields

    The structured array has fields 'id' and 'name', but no 'age' field.
  2. Step 2: Analyze the print statement

    Trying to print arr['age'] causes an error because 'age' is not defined in dtype.
  3. Final Answer:

    Field 'age' does not exist in the structured array. -> Option C
  4. Quick Check:

    Accessing undefined field = error [OK]
Hint: Check field names carefully before accessing [OK]
Common Mistakes:
  • Assuming all fields exist by default
  • Ignoring dtype field names
  • Confusing data values with field names
5. You have a structured array with fields 'name' (string), 'age' (int), and 'score' (float). How can you sort this array first by 'age' ascending, then by 'score' descending?
hard
A. Use arr['score'] = -arr['score']
arr.sort(order=['age', 'score'])
B. Use np.sort(arr, order=['age', 'score']) with a custom comparator for descending score.
C. Use arr.sort(order=['age']) then arr['score'] = -arr['score'] before sorting again.
D. Use arr.sort(order=['age']) then arr[arr['age'] == age_value].sort(order='score') for each age.

Solution

  1. Step 1: Understand sorting by multiple fields

    NumPy structured arrays can be sorted by multiple fields using sort(order=[...]), but only ascending.
  2. Step 2: Handle descending order

    To sort 'score' descending, negate it first (arr['score'] = -arr['score']), then arr.sort(order=['age', 'score']). This sorts age ascending, then negated score ascending (original score descending).
  3. Final Answer:

    Use arr['score'] = -arr['score']
    arr.sort(order=['age', 'score'])
    -> Option A
  4. Quick Check:

    Negate score + sort(['age', 'score']) = age asc + score desc [OK]
Hint: Sort ascending then reverse for descending fields [OK]
Common Mistakes:
  • Expecting sort(order=...) to handle descending directly
  • Trying to negate fields without sorting again
  • Sorting subsets separately without combining results