Structured dtypes let you store different types of data together in one array, like a table with columns.
Defining structured dtypes in NumPy
Start learning this pattern below
Jump into concepts and practice - no test required
or
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
Syntax
NumPy
dtype = np.dtype([('field1', type1), ('field2', type2), ...])
Each field has a name and a data type.
Data types can be standard numpy types like 'int32', 'float64', or fixed-length strings like 'S10'.
Examples
NumPy
dtype = np.dtype([('name', 'S10'), ('age', 'int32'), ('height', 'float64')])
NumPy
dtype = np.dtype({'names': ['x', 'y'], 'formats': ['int32', 'int32']})NumPy
dtype = np.dtype([('id', 'int32'), ('score', 'float64')])
Sample Program
This code creates a structured array with fields for name, age, and height. It then prints the whole array, the ages of all people, and the first person's name decoded from bytes to string.
NumPy
import numpy as np # Define structured dtype for a person person_dtype = np.dtype([('name', 'S10'), ('age', 'int32'), ('height', 'float64')]) # Create an array of 3 people people = np.array([(b'Alice', 25, 5.5), (b'Bob', 30, 6.0), (b'Carol', 22, 5.7)], dtype=person_dtype) # Print the whole array print(people) # Access the 'age' field for all people print(people['age']) # Access the first person's name print(people[0]['name'].decode('utf-8'))
Important Notes
Strings in structured dtypes are stored as bytes, so you may need to decode them to get normal text.
You can access each field like a column in a table using the field name.
Structured arrays are useful for small to medium datasets with mixed data types.
Summary
Structured dtypes let you combine different data types in one array.
Define them by listing field names and their types.
You can access each field separately like columns in a table.
Practice
1. What is the main purpose of defining a structured dtype in
numpy?easy
Solution
Step 1: Understand structured dtype concept
Structured dtypes allow combining different data types in one array with named fields.Step 2: Compare options with concept
Only To combine multiple data types in one array with named fields correctly describes this purpose; others describe unrelated features.Final Answer:
To combine multiple data types in one array with named fields -> Option DQuick Check:
Structured dtype = combine types [OK]
Hint: Structured dtype means named fields with different types [OK]
Common Mistakes:
- Thinking structured dtype is for single data type arrays
- Confusing structured dtype with speed optimization
- Believing it converts arrays to lists
2. Which of the following is the correct syntax to define a structured dtype with fields 'name' as string and 'age' as integer?
easy
Solution
Step 1: Recall structured dtype syntax
Structured dtype is defined as a list of tuples with (field_name, data_type).Step 2: Check each option
dtype = [('name', 'U10'), ('age', 'i4')] matches the correct syntax; others use invalid formats or types.Final Answer:
dtype = [('name', 'U10'), ('age', 'i4')] -> Option AQuick Check:
List of tuples = correct dtype syntax [OK]
Hint: Use list of (field, type) tuples for structured dtype [OK]
Common Mistakes:
- Using dictionary instead of list of tuples
- Using colon instead of comma inside tuples
- Using integer 10 instead of string 'U10' for string length
3. What will be the output of this code?
import numpy as np
dtype = [('id', 'i4'), ('score', 'f4')]
data = np.array([(1, 9.5), (2, 8.0)], dtype=dtype)
print(data['score'])medium
Solution
Step 1: Understand structured array creation
Array has fields 'id' (int) and 'score' (float). Data has two records.Step 2: Access 'score' field
Printing data['score'] returns array of scores: [9.5, 8.0].Final Answer:
[9.5 8. ] -> Option AQuick Check:
Access field returns values [9.5 8.0] [OK]
Hint: Access field by name to get its values array [OK]
Common Mistakes:
- Expecting full tuples instead of single field values
- Confusing field names causing errors
- Printing whole array instead of one field
4. Identify the error in this code snippet:
import numpy as np
dtype = [('name', 'U5'), ('age', 'i4')]
data = np.array([('Alice', 25), ('Bob', 30)], dtype=dtype)
print(data['age'])medium
Solution
Step 1: Check string length for 'name' field
'U5' means max 5 characters, but 'Alice' has 5 characters, which fits exactly.Step 2: Verify if any error occurs
Actually, 'Alice' fits in 'U5', so no error from length. Check other options.Step 3: Re-examine options
Options B, C, and D incorrectly identify non-existent errors; the code runs fine.Final Answer:
No error, code runs fine -> Option BQuick Check:
String length fits exactly, no error [OK]
Hint: Check string length carefully; exact fit is allowed [OK]
Common Mistakes:
- Assuming string length must be larger than string length
- Confusing dtype syntax with dictionary
- Thinking missing parentheses cause error here
5. You want to create a structured array to store employee data with fields: 'emp_id' (integer), 'name' (string max 8 chars), and 'salary' (float). Which dtype definition is correct and why?
Options:
A) dtype = [('emp_id', 'i4'), ('name', 'U8'), ('salary', 'f8')]
B) dtype = [('emp_id', int), ('name', 'S8'), ('salary', float)]
C) dtype = [('emp_id', 'i8'), ('name', 'U8'), ('salary', 'f4')]
D) dtype = [('emp_id', 'i4'), ('name', 'U10'), ('salary', 'f8')]hard
Solution
Step 1: Check each dtype option against requirements
Requirement: emp_id int, name string max 8 chars, salary float.Step 2: Analyze each option
A uses 'i4' (4-byte int), 'U8' (8-char Unicode), 'f8' (8-byte float) - matches perfectly.
B uses 'S8' (bytes string instead of unicode 'U8').
C uses 'i8' (8-byte int) unnecessarily and 'f4' (4-byte float) for salary.
D uses 'U10' allowing 10 chars, exceeding max 8 chars.Final Answer:
Correct: uses 4-byte int, 8-char Unicode string, 8-byte float -> Option CQuick Check:
Match dtype sizes and string length exactly [OK]
Hint: Match field sizes exactly to requirements [OK]
Common Mistakes:
- Using bytes 'S8' instead of unicode 'U8'
- Choosing larger sizes than needed
- Allowing longer strings than specified
