🔍 NumPy Indexing, Slicing & Iterating
Last Updated: 09 Nov 2025
In NumPy, indexing means selecting specific elements, and slicing means selecting a range (part) of elements.
🗣 Hinglish Tip: “Indexing = ek element lena, Slicing = ek se zyada ek range lena!”
Indexing in 1D Arrays
import numpy as np
arr = np.array([10, 20, 30, 40, 50])
print("Array:", arr)
print("First element:", arr[0])
print("Last element:", arr[-1])
print("Middle element:", arr[2])
print(arr[-2]) # 2nd last element
Indexing in 2D Arrays
You can access using row, column index.
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr)
print("Element at [0,0]:", arr[0, 0])
print("Element at [1,2]:", arr[1, 2])
print("First row:", arr[0])
print("Second column:", arr[:, 1])
🗣 Hinglish Tip:arr[row, column] likh ke access karte hain — bilkul matrix jaisa!
Slicing in 1D Arrays
import numpy as np
arr = np.array([10, 20, 30, 40, 50, 60])
print(arr[1:4]) # From index 1 to 3
print(arr[:3]) # From start to index 2
print(arr[3:]) # From index 3 to end
print(arr[::2]) # Every 2nd element
print(arr[-4:-1]) # Slice from 2nd to last
Slicing in 2D Arrays
arr = np.array([[10,20,30,40],
[50,60,70,80],
[90,100,110,120]])
print(arr[0:2, 1:3]) # rows 0-1, cols 1-2
print(arr[:, 2]) # all rows, only 3rd column
print(arr[1, :]) # 2nd row, all columns
🧠 Pattern:arr[row_start:row_end, col_start:col_end]
Iterating over Arrays
1D Array
arr = np.array([10, 20, 30])
for x in arr:
print(x)
2D Array
arr = np.array([[1,2,3], [4,5,6]])
for row in arr:
print("Row:", row)
flat
- turns any array (2D, 3D, 5D…) into a 1D iterator.
- You can loop through it, read values, or even change them.
- It always follows the order the data is stored in memory (usually row-by-row).
a = np.array([[10, 20, 30],
[40, 50, 60],
[70, 80, 90]])
print("All values one by one:")
for value in a.flat:
print(value, end=' ')
# Output: 10 20 30 40 50 60 70 80 90
print("Change values directly:")
a.flat[2] = 999 # 3rd element (0-based)
a.flat[5] = 555 # 6th element
a.flat[-1] = 111 # last element
a.flat[::2] = 0 # make every second element zero
a.flat[[1,3,5]] = 7 # change specific positions
print(a)
np.nditer()
- best way to iterate over arrays (2D, 3D, 5D...)
- Better performance than
forloops and faster thanflat
arr = np.array([[10,20],[30,40],[50,60]])
# READ ONLY
for x in np.nditer(arr):
print(x)
# Index and value
for value in np.nditer(arr, flags=['multi_index']):
print(f"Position {value} is at index {np.nditer.multi_index}")
# VALUE CHANGES
for x in np.nditer(arr, op_flags=['readwrite']):
x[...] = x * 10 # [...] means "write back to same place"
print(arr)
# Two arrays iteration
a = np.array([[10, 20, 30],
[40, 50, 60],
[70, 80, 90]])
b = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
for x, y in np.nditer([a, b]):
print(x, y)
🗣 Hinglish Tip:“nditer() ka matlab hai ‘n-dimensional iterator’ — easy tarike se har element access karne ke liye.