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:
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-এর সব নিয়ম চলে:
ML-এর সবচেয়ে common slicing
শেষ column label (দাম), বাকিগুলো feature (আয়তন, রুম, বয়স)।
Boolean mask: শর্ত দিয়ে filter
তুলনা করলে একই shape-এর True/False array পাওয়া যায় — mask। সেটা দিয়ে index করলে শুধু True জায়গার মান আসে:
একাধিক শর্তে
and/orনা —&আর|ব্যবহার করো, আর প্রতিটা শর্ত bracket-এ রাখো।ages >= 18 and ages < 40error দেয়।
Mask দিয়ে মান বদলানোও যায়:
Sensor data-য় "missing" বোঝাতে প্রায়ই -999 থাকে — এভাবে NaN-এ রূপান্তর করা হয়।
Fancy indexing: index-এর list
Index হিসেবে list দিলে সেই position-গুলোর item আসে — যেকোনো ক্রমে, পুনরাবৃত্তি সহ।
View বনাম Copy: গুরুত্বপূর্ণ ফাঁদ
- 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 বের করো
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 দিয়ে
Quiz
Challenge
Challenge
One-hot encoding
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 ছাড়া।
বাস্তবে কোথায় ব্যবহার হয়?
Model-এর ভুলগুলো খুঁজে বের করা — error analysis, ML engineer-এর সবচেয়ে মূল্যবান কাজগুলোর একটা:
এই ভুলগুলো দেখে বোঝা যায় 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।