Skip to content

NumPy Data Types (dtypes)

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.

diagram How NumPy infers a dtype mermaid
numpy.array walks the input data once and picks the narrowest common dtype that can hold every value.
check
import numpy as np
 
arr = np.array([1, 2, 3])
print(arr.dtype)
ints
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)

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.

memory
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)
sketch Memory layout: int8 vs int64 p5.js
Each block is one byte. A single int64 element takes as much memory as eight int8 elements.
astype
import numpy as np
 
arr = np.array([1, 2, 3])
arr_f = arr.astype(np.float64)
print(arr_f, arr_f.dtype)

Converting large values into a smaller dtype can overflow.

overflow
import numpy as np
 
arr = np.array([300], dtype=np.int16)
print(arr.astype(np.uint8))  # wraps around in many cases

NumPy numeric arrays can’t store NaN in integer dtype.

nan-int
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)

If you mix strings and numbers, dtype may become object or strings.

mixed
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.

pch.coffeeTagline

pch.coffeeCta

pch.feedbackHeading

pch.feedbackSubheading