NumPy Data Types (dtypes)
What is a dtype?
A dtype (data type) tells NumPy what kind of values an array contains, such as:
- integers (
int32int32,int64int64) - floats (
float32float32,float64float64) - booleans (
boolbool) - strings (
<U...<U...) and bytes (|S...|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 (intint, floatfloat) followed by the number of bits per element. A standard double-precision float takes 8 bytes (64 bits) — hence float64float64.
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
import numpy as np
arr = np.array([1, 2, 3])
print(arr.dtype)import numpy as np
arr = np.array([1, 2, 3])
print(arr.dtype)Common numeric dtypes
Integers
a = np.array([1, 2, 3], dtype=np.int32)
b = np.array([1, 2, 3], dtype=np.int64)
print(a.dtype, b.dtype)a = np.array([1, 2, 3], dtype=np.int32)
b = np.array([1, 2, 3], dtype=np.int64)
print(a.dtype, b.dtype)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)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
Smaller dtypes use less memory. Every element in a float32float32 array takes 4 bytes; every element in a float64float64 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)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
Using .astype().astype()
import numpy as np
arr = np.array([1, 2, 3])
arr_f = arr.astype(np.float64)
print(arr_f, arr_f.dtype)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)
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 casesimport numpy as np
arr = np.array([300], dtype=np.int16)
print(arr.astype(np.uint8)) # wraps around in many casesDtype pitfalls in data analytics
1) Missing values
NumPy numeric arrays can’t store NaNNaN 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)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
If you mix strings and numbers, dtype may become objectobject or strings.
import numpy as np
arr = np.array([1, "two", 3])
print(arr)
print(arr.dtype)import numpy as np
arr = np.array([1, "two", 3])
print(arr)
print(arr.dtype)Arrays with dtype=objectdtype=object are slower for numerical operations.
Next
Continue to: Indexing and Slicing Arrays to learn how to select, filter, and extract parts of arrays.
🧪 Try It Yourself
Exercise 1 – Check and Set dtype
Exercise 2 – Convert with astype()
Exercise 3 – Memory Cost of a dtype
If this helped you, consider buying me a coffee ☕
Buy me a coffeeWas this page helpful?
Let us know how we did
