Python Tutorial
NumPy Iterating Arrays
You can loop with Python for, but nditer walks every element regardless of dimension. Prefer vectorized ops over loops when you can.
Loop 1D and 2D
import numpy as np
for x in np.array([1, 2, 3]):
print(x)
for row in np.array([[1, 2], [3, 4]]):
for cell in row:
print(cell)nditer
arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
for x in np.nditer(arr):
print(x)ndenumerate
Get the index together with the value:
for idx, x in np.ndenumerate(arr):
print(idx, x)📘 Real-World Deep Dive
Knowing <strong>NumPy Iterating (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 Iterating that you'd actually see in a data pipeline or analytics notebook.
Real-Life Example
import numpy as np
a = np.arange(6).reshape(2, 3)
for row in a:
print("row:", row)
for x in np.nditer(a, order="F"):
print(x, end=" ")
print()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 Iterating 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.