🔪 Basic Indexing and Slicing

Basic indexing and slicing are the foundation for accessing NumPy arrays! Extract single elements, rows, columns, and sections efficiently.

import numpy as np

# Basic indexing overview
data = np.array([[10, 20, 30, 40],
                 [50, 60, 70, 80],
                 [90, 100, 110, 120]])

print(f"Array: \n{data}")

# Single element and slicing
print(f"Element [1, 2]: {data[1, 2]}")
print(f"Row 0: {data[0]}")
print(f"Column 2: {data[:, 2]}")

🎯 Single Element Access

Access individual elements using row and column coordinates.

import numpy as np

matrix = np.array([[1, 2, 3, 4],
                   [5, 6, 7, 8],
                   [9, 10, 11, 12]])

# Single elements
print(f"matrix[0, 0]: {matrix[0, 0]}")    # First element
print(f"matrix[1, 2]: {matrix[1, 2]}")    # Row 1, Column 2
print(f"matrix[-1, -1]: {matrix[-1, -1]}")  # Last element

📏 Row and Column Access

Extract entire rows or columns using the colon : operator.

import numpy as np

grades = np.array([[85, 92, 78, 88],   # Alice
                   [79, 85, 91, 82],   # Bob
                   [94, 89, 96, 93]])  # Carol

# Row access
print(f"Alice's grades: {grades[0]}")

# Column access  
print(f"Math grades: {grades[:, 0]}")
print(f"Science grades: {grades[:, 1]}")

✂️ Basic Slicing

Extract sections using start:end:step notation.

Basic Slice Patterns

import numpy as np

data = np.array([10, 20, 30, 40, 50, 60, 70, 80])
print(f"Original: {data}")

# Common patterns
print(f"First 4: {data[:4]}")      # [10, 20, 30, 40]
print(f"From index 3: {data[3:]}")  # [40, 50, 60, 70, 80]
print(f"Middle: {data[2:6]}")      # [30, 40, 50, 60]

Step Slicing

import numpy as np

data = np.array([10, 20, 30, 40, 50, 60, 70, 80])

# Step patterns
print(f"Every 2nd: {data[::2]}")    # [10, 30, 50, 70]
print(f"Every 3rd: {data[::3]}")    # [10, 40, 70]
print(f"Reverse: {data[::-1]}")     # [80, 70, 60, 50, 40, 30, 20, 10]

Negative Indices

import numpy as np

data = np.array([10, 20, 30, 40, 50, 60, 70, 80])

# Negative indexing
print(f"Last 3: {data[-3:]}")       # [60, 70, 80]
print(f"All but last 2: {data[:-2]}")  # [10, 20, 30, 40, 50, 60]

🎯 2D Array Slicing

Two-dimensional slicing: array[row_slice, column_slice].

Row Slicing

import numpy as np

matrix = np.array([[10, 20, 30, 40],
                   [50, 60, 70, 80],
                   [90, 100, 110, 120],
                   [130, 140, 150, 160]])

# Row slicing
print(f"First 2 rows: \n{matrix[:2]}")
print(f"Last 2 rows: \n{matrix[-2:]}")
print(f"Every other row: \n{matrix[::2]}")

Column Slicing

import numpy as np

matrix = np.array([[10, 20, 30, 40],
                   [50, 60, 70, 80],
                   [90, 100, 110, 120]])

# Column slicing
print(f"First 2 columns: \n{matrix[:, :2]}")
print(f"Last 2 columns: \n{matrix[:, -2:]}")
print(f"Every other column: \n{matrix[:, ::2]}")

Combined Slicing

import numpy as np

matrix = np.array([[10, 20, 30, 40, 50],
                   [60, 70, 80, 90, 100],
                   [110, 120, 130, 140, 150],
                   [160, 170, 180, 190, 200]])

# Combined row and column slicing
print(f"Center 2x2: \n{matrix[1:3, 1:3]}")
print(f"Corners: \n{matrix[::3, ::4]}")
print(f"Border: \n{matrix[[0, -1]]}[:, [0, -1]]")

🧠 Practice Exercise

import numpy as np

# Sales data: 4 stores, 5 days
sales = np.array([[120, 135, 98, 145, 167],
                  [98, 112, 156, 134, 143],
                  [167, 189, 145, 178, 192],
                  [134, 145, 123, 156, 171]])

stores = ['Store A', 'Store B', 'Store C', 'Store D']
days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']

# Access specific data
print(f"Store C Wednesday: {sales[2, 2]}")
print(f"All stores Friday: {sales[:, -1]}")
print(f"Store A all days: {sales[0]}")
print(f"Weekday sales (Mon-Wed): \n{sales[:, :3]}")

🎯 Key Takeaways

🚀 What's Next?

Master basic indexing! Now learn advanced indexing techniques.

Continue to: Advanced Indexing

Was this helpful?

😔Poor
🙁Fair
😊Good
😄Great
🤩Excellent