মূল content-এ যাও

Python for AI/NumPy/Lesson 35

Indexing ও Slicing

2D array থেকে row, column আর অংশ বের করা; boolean mask দিয়ে filter; fancy indexing; আর view বনাম copy — যে ফাঁদে অনেকেই data নষ্ট করে।

সময়
24 মিনিট
Exercise
1
Challenge
1
Quiz
3 প্রশ্ন

সহজ ভাষায়

1D array-এর indexing list-এর মতোই। নতুন হলো 2D — যেখানে [row, column] দুটো index:

main.py
             col 0  col 1  col 2
    row 0  [  72     85     64 ]
    row 1  [  90     78     88 ]    scores[1, 2] = 88
    row 2  [  55     92     70 ]
                      ^
              scores[:, 1] = [85, 78, 92]

কেন দরকার?

  • Dataset থেকে feature (column) আর label আলাদা করা: X = data[:, :-1], y = data[:, -1]
  • ছবি crop করা: image[50:150, 100:200]
  • শর্ত দিয়ে data filter: "যেসব sample-এর বয়স ১৮-এর বেশি"
  • Model-এর ভুল prediction খোঁজা: X[pred != y]

2D slicing

[row_slice, column_slice] — প্রতিটা অংশে list slicing-এর সব নিয়ম চলে:

main.py

ML-এর সবচেয়ে common slicing

main.py

শেষ column label (দাম), বাকিগুলো feature (আয়তন, রুম, বয়স)।

Boolean mask: শর্ত দিয়ে filter

তুলনা করলে একই shape-এর True/False array পাওয়া যায় — mask। সেটা দিয়ে index করলে শুধু True জায়গার মান আসে:

main.py

একাধিক শর্তে and/or না — & আর | ব্যবহার করো, আর প্রতিটা শর্ত bracket-এ রাখো। ages >= 18 and ages < 40 error দেয়।

Mask দিয়ে মান বদলানোও যায়:

main.py

Sensor data-য় "missing" বোঝাতে প্রায়ই -999 থাকে — এভাবে NaN-এ রূপান্তর করা হয়।

Fancy indexing: index-এর list

main.py

Index হিসেবে list দিলে সেই position-গুলোর item আসে — যেকোনো ক্রমে, পুনরাবৃত্তি সহ।

View বনাম Copy: গুরুত্বপূর্ণ ফাঁদ

main.py
  • Slicing (a[1:3]) → view: একই memory, বদলালে মূল array বদলায়। (বড় data-য় memory বাঁচায়।)
  • Boolean/fancy indexing (a[mask], a[[0, 2]]) → copy।
  • নিশ্চিত হতে চাইলে .copy() লেখো।

Preprocessing-এর সময় না বুঝে মূল dataset নষ্ট করে ফেলা খুব common bug।

Exercise

Exercise

Score table থেকে data বের করো

+20 XP

scores একটা 4×3 array — ৪ জন student (row), ৩টা subject (column: Math, Physics, English)।

  • second_student — দ্বিতীয় student-এর সব score (1D array)
  • english — সবার English score (শেষ column)
  • above_80 — পুরো table-এ 80-এর বেশি সব score (1D array), boolean mask দিয়ে
solution.py

Quiz

  1. Q1a = np.arange(12).reshape(3, 4) — a[1, 2] কত?
  2. Q2a[:, 0] কী দেয়?
  3. Q3নিচের code-এর পর a কী?
    a = np.array([1, 2, 3, 4])
    b = a[:2]
    b[0] = 99
    
0/3 answered

Challenge

Challenge

One-hot encoding

+50 XP

Classification model-এ label সাধারণত one-hot আকারে যায় — প্রতিটা label-এর জন্য একটা row, যেখানে শুধু সেই class-এর জায়গায় 1:

label 2, 4টা class → [0, 0, 1, 0]

one_hot(labels, num_classes) function লেখো যেটা (len(labels), num_classes) shape-এর float array return করে। Loop ছাড়া।

solution.py

বাস্তবে কোথায় ব্যবহার হয়?

Model-এর ভুলগুলো খুঁজে বের করা — error analysis, ML engineer-এর সবচেয়ে মূল্যবান কাজগুলোর একটা:

main.py

এই ভুলগুলো দেখে বোঝা যায় model কোথায় দুর্বল — "ঠিক আছে", "খুব খারাপ"-এর মতো মাঝামাঝি বা negation-ওয়ালা কথায়। পরের পদক্ষেপ: এমন আরও data যোগ করা।

Interview প্রশ্ন

  • Beginner: a[1, 2] আর a[1][2]-এর পার্থক্য কী? (ফলাফল একই, কিন্তু প্রথমটা এক ধাপে — দ্রুত।)
  • Intermediate: Boolean mask কী? দুটো শর্ত কীভাবে মেলাবে?
  • Advanced: কোন indexing view দেয় আর কোনটা copy? কেন এই পার্থক্য performance-এর জন্য গুরুত্বপূর্ণ?

এরপর কী?

Data বের করতে পারি। এখন পুরো array-এর ওপর গাণিতিক হিসাব — exp, log, sqrt, আর activation function। পরের lesson: Vectorized Operations।