NumPy Cheatsheet
Creating Arrays
Use this NumPy reference while you build software engineering projects, review code for technical interview prep, or polish examples for a software engineer resume.
From Python Sequences
import numpy as np np.array([1, 2, 3]) # 1-D from list np.array((1, 2, 3)) # 1-D from tuple np.array([[1, 2], [3, 4]]) # 2-D from nested lists np.array([1, 2, 3], dtype=np.float32) # specify dtype np.array([1, 2, 3], ndmin=2) # at least 2-D → shape (1, 3) np.asarray([1, 2, 3]) # like array() but NO copy if already ndarray np.asarray(existing, dtype=float) # cast without copy when possible
Gotcha: ragged lists (lists of lists with different lengths) give
dtype=object. NumPy ≥ 1.24 raises aValueErrorby default; passdtype=objectexplicitly.
Constant-fill Arrays
| Function | Description |
|---|---|
np.zeros(shape) | all zeros, float64 by default |
np.ones(shape) | all ones, float64 by default |
np.full(shape, fill_value) | fill with a scalar |
np.empty(shape) | uninitialized (fast, garbage values) |
np.zeros_like(a) | zeros with same shape/dtype as a |
np.ones_like(a) | ones with same shape/dtype |
np.full_like(a, val) | fill with same shape/dtype |
np.empty_like(a) | uninitialized with same shape/dtype |
np.zeros((3, 4)) # shape (3, 4), float64 np.ones((2, 2), dtype=np.int32) # shape (2, 2), int32 np.full((3,), np.pi) # [3.14159, 3.14159, 3.14159] np.empty((2, 3)) # uninitialized — values unpredictable a = np.array([[1, 2], [3, 4]]) np.zeros_like(a) # same shape (2, 2) and dtype, all 0 np.full_like(a, 7) # [[7, 7], [7, 7]]
Sequences and Ranges
np.arange(10) # [0, 1, ..., 9] np.arange(1, 10) # [1, 2, ..., 9] np.arange(0, 1, 0.1) # [0.0, 0.1, ..., 0.9] — stop is exclusive np.arange(5, dtype=float) # [0., 1., 2., 3., 4.] np.linspace(0, 1, 5) # [0., .25, .5, .75, 1.] — 5 evenly spaced INCLUDING endpoints np.linspace(0, 1, 5, endpoint=False) # excludes 1.0 val, step = np.linspace(0, 1, 5, retstep=True) # also returns step size np.logspace(0, 3, 4) # [1., 10., 100., 1000.] — base 10 default np.logspace(0, 3, 4, base=2) # 2^0 … 2^3 np.geomspace(1, 1000, 4) # geometric spacing: [1., 10., 100., 1000.]
Prefer
linspaceoverarangefor floats —arangewith float step can produce off-by-one counts due to floating-point rounding.
Identity and Diagonal
np.eye(3) # 3×3 identity matrix (float64) np.eye(3, k=1) # k>0: above diagonal; k<0: below np.eye(3, 4) # 3×4 matrix with 1s on main diagonal np.identity(3) # strictly square identity (no k) np.diag([1, 2, 3]) # diagonal matrix from 1-D array np.diag(a) # extract main diagonal from 2-D array np.diag(a, k=1) # extract k-th diagonal np.diagflat([[1, 2], [3, 4]]) # flatten then make diagonal matrix
Grid Arrays
# meshgrid — 2-D coordinate grids x = np.linspace(-1, 1, 3) y = np.linspace(0, 2, 3) X, Y = np.meshgrid(x, y) # X.shape == Y.shape == (3, 3) X, Y = np.meshgrid(x, y, indexing="ij") # matrix (i=x, j=y) indexing # mgrid — dense, slice-based G = np.mgrid[0:3, 0:4] # G.shape == (2, 3, 4) # ogrid — open (sparse) grid — efficient for broadcasting r, c = np.ogrid[0:3, 0:4] # r.shape (3,1), c.shape (1,4) # indices — grid of indices np.indices((3, 4)) # shape (2, 3, 4)
Tiling and Repeating
np.tile([1, 2], 3) # [1, 2, 1, 2, 1, 2] np.tile([[1, 2]], (2, 3)) # 2×6 array np.repeat([1, 2, 3], 2) # [1, 1, 2, 2, 3, 3] np.repeat([[1, 2]], [2, 3], axis=1) # per-element repeat counts
From Buffers and Existing Memory
np.frombuffer(b"\x01\x02\x03", dtype=np.uint8) # from bytes buffer np.frombuffer(b"\x00\x00\x80\x3f", dtype=np.float32) # → [1.0] np.fromiter(range(5), dtype=int, count=5) # from any iterable # np.fromstring in text mode emits DeprecationWarning — instead use # np.frombuffer (binary data, above) or np.loadtxt (text files, below): np.array("1 2 3".split(), dtype=int) # parse a string of numbers np.fromfile("data.bin", dtype=np.float64) # from binary file np.fromfile("data.txt", dtype=float, sep="\n") # from text file
Loading from Text / Files
np.loadtxt("data.csv", delimiter=",", dtype=float, skiprows=1) np.genfromtxt("data.csv", delimiter=",", names=True, dtype=None, encoding="utf-8") # Save and load NumPy binary format np.save("arr.npy", a) a = np.load("arr.npy") np.savez("arrays.npz", x=a, y=b) # multiple arrays data = np.load("arrays.npz") data["x"], data["y"] np.savez_compressed("arrays.npz", x=a) # compressed
Special Values
np.nan # IEEE 754 NaN (float) np.inf # positive infinity -np.inf # negative infinity (np.NINF removed in NumPy 2.0) 0.0 # +0.0 (np.PZERO removed in NumPy 2.0) -0.0 # -0.0 (np.NZERO removed in NumPy 2.0) np.e # Euler's number np.pi # π np.euler_gamma # Euler–Mascheroni constant np.finfo(np.float64).eps # machine epsilon ≈ 2.22e-16 np.finfo(np.float32).max # max representable float32 np.iinfo(np.int32).max # max int32 = 2147483647