NumPy Data Types (dtypes)
What is a dtype?
Section titled “What is a dtype?”A dtype (data type) tells NumPy what kind of values an array contains, such as:
- integers (
int32,int64) - floats (
float32,float64) - booleans (
bool) - strings (
<U...) and bytes (|S...)
Because NumPy uses a single dtype for the entire array, it can store values efficiently and run fast computations. A dtype name is really just a hint about memory layout: a type name (int, float) followed by the number of bits per element. A standard double-precision float takes 8 bytes (64 bits) — hence float64.
flowchart TD
A["np.array(data)"] --> B{"All values
the same kind?"}
B -- "All ints" --> C["dtype: int64"]
B -- "Any float present" --> D["dtype: float64"]
B -- "Any string present" --> E["dtype: string / object"]
B -- "Explicit dtype= given" --> F["Use that dtype
(cast or error)"]
Checking dtype
Section titled “Checking dtype”import numpy as np
arr = np.array([1, 2, 3])
print(arr.dtype)Common numeric dtypes
Section titled “Common numeric dtypes”Integers
Section titled “Integers”a = np.array([1, 2, 3], dtype=np.int32)
b = np.array([1, 2, 3], dtype=np.int64)
print(a.dtype, b.dtype)Floats
Section titled “Floats”a = np.array([1.5, 2.0, 3.25], dtype=np.float32)
b = np.array([1.5, 2.0, 3.25], dtype=np.float64)
print(a.dtype, b.dtype)Memory usage and dtype
Section titled “Memory usage and dtype”Smaller dtypes use less memory. Every element in a float32 array takes 4 bytes; every element in a float64 array takes 8 bytes — double the space for the same number of values.
import numpy as np
arr32 = np.ones(1_000_000, dtype=np.float32)
arr64 = np.ones(1_000_000, dtype=np.float64)
print("float32 bytes:", arr32.nbytes)
print("float64 bytes:", arr64.nbytes)Type conversion
Section titled “Type conversion”Using .astype()
Section titled “Using .astype()”import numpy as np
arr = np.array([1, 2, 3])
arr_f = arr.astype(np.float64)
print(arr_f, arr_f.dtype)Safe conversion (avoid overflow)
Section titled “Safe conversion (avoid overflow)”Converting large values into a smaller dtype can overflow.
import numpy as np
arr = np.array([300], dtype=np.int16)
print(arr.astype(np.uint8)) # wraps around in many casesDtype pitfalls in data analytics
Section titled “Dtype pitfalls in data analytics”1) Missing values
Section titled “1) Missing values”NumPy numeric arrays can’t store NaN in integer dtype.
import numpy as np
# This will upcast to float automatically because of np.nan
arr = np.array([1, 2, np.nan])
print(arr)
print(arr.dtype)2) Mixed types
Section titled “2) Mixed types”If you mix strings and numbers, dtype may become object or strings.
import numpy as np
arr = np.array([1, "two", 3])
print(arr)
print(arr.dtype)Arrays with dtype=object are slower for numerical operations.
Continue to: Indexing and Slicing Arrays to learn how to select, filter, and extract parts of arrays.
🧪 Try It Yourself
Section titled “🧪 Try It Yourself”Exercise 1 – Check and Set dtype
Section titled “Exercise 1 – Check and Set dtype”Exercise 2 – Convert with astype()
Section titled “Exercise 2 – Convert with astype()”Exercise 3 – Memory Cost of a dtype
Section titled “Exercise 3 – Memory Cost of a dtype”pch.coffeeTagline
pch.coffeeCtapch.feedbackHeading
pch.feedbackSubheading