Python Tutorial
NumPy Creating Arrays
Build ndarrays from lists, or use helpers for zeros, ones, ranges, and random values.
From a Python List
import numpy as np
a = np.array([1, 2, 3])
b = np.array([[1, 2, 3], [4, 5, 6]]) # 2D
c = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) # 3D
print(a.ndim, b.ndim, c.ndim) # 1 2 3Helpers
np.zeros((2, 3)) # 2x3 zeros
np.ones(4) # [1. 1. 1. 1.]
np.full((2, 2), 7) # every cell is 7
np.arange(0, 10, 2) # [0 2 4 6 8]
np.linspace(0, 1, 5) # 5 values from 0 to 1
np.eye(3) # 3x3 identityRandom
rng = np.random.default_rng(42)
print(rng.random((2, 3)))
print(rng.integers(1, 10, size=5))Prefer np.random.default_rng() over the older np.random.rand API. It is the current Generator interface.
Force a Dimension
arr = np.array([1, 2, 3, 4], ndmin=2)
print(arr)
print(arr.shape) # (1, 4)📘 Real-World Deep Dive
Knowing <strong>NumPy Creating Arrays (NumPy)</strong> well is what turns NumPy from a curiosity into a daily tool — you'll reach for it in nearly every real project.
Real-Life Scenario
An end-to-end usage of NumPy Creating Arrays that you'd actually see in a data pipeline or analytics notebook.
Real-Life Example
import numpy as np
zeros = np.zeros((2, 3), dtype=np.float32)
ones = np.ones((2, 3))
seq = np.arange(0, 10, 2)
print(zeros.shape, zeros.dtype, seq)Expected Output
(see source)Common mistakes
- NumPy uses 0-based, C-order indexing — the rightmost axis is the *fastest-varying* one. Mixing it with Fortran-order arrays is a common surprise.
np.array([[1,2],[3,4]], dtype=int)is fine, but a ragged Python list produces dtype=object and silently disables vectorisation.- In-place ops (
a *= 2) sometimes break views instead of returning a new array; usenp.multiply(a, 2, out=...)if explicitness matters. - Treating NumPy Creating Arrays as a black box without reading the docs — the API has subtle defaults that bite when you scale.
🚀 Performance & Best Practices
- Vectorise: replace Python
forloops with ufuncs; you can expect 10–100× speedups. - Pre-allocate output arrays with
np.emptyinstead of growing them withnp.append. - Keep data in float32 unless you need float64 precision — half the memory, double the cache locality.
- When working with NumPy, prefer vectorised / batched operations over Python loops.
🧪 Try It Yourself
- Reproduce the snippet on a representative slice of your own data.
- Profile the snippet with
cProfileortimeitand find the single biggest improvement. - Generalise the snippet into a small, reusable function you can drop into future projects.