মূল content-এ যাও

Python for AI/NumPy/Lesson 37

Broadcasting

ভিন্ন shape-এর array নিয়ে হিসাব — broadcasting-এর নিয়ম, [:, None] দিয়ে column বানানো, আর ML-এর সবচেয়ে common preprocessing ধাপ: feature standardization।

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

সহজ ভাষায়

একই shape-এর দুটো array যোগ করা সহজ। কিন্তু:

main.py

প্রথমটায় একটা সংখ্যা পুরো matrix-এ যোগ হলো। দ্বিতীয়টায় একটা 1D array প্রতিটা row-তে গুণ হলো। কেউ কোনো loop লেখেনি, কেউ copy বানায়নি — NumPy নিজে ছোট array-টাকে "প্রসারিত" করে নিয়েছে। একে বলে broadcasting।

কেন দরকার?

  • Bias যোগ — neural network-এর প্রতিটা layer: X @ W + b (b প্রতিটা sample-এর row-তে যোগ হয়)
  • Normalization — প্রতিটা column থেকে তার গড় বিয়োগ
  • ছবি — (H, W, 3) ছবির প্রতিটা pixel থেকে RGB গড় বিয়োগ (ImageNet normalization)
  • Distance — সব point থেকে একটা point-এর দূরত্ব একসাথে

Broadcasting ছাড়া এগুলো লিখতে loop বা বিশাল copy লাগত।

Visual intuition

   (2, 3)              (3,)                 (2, 3)
[[100 200 300]   +   [1  2  3]     ->   [[101 202 303]
 [400 500 600]]       ^ প্রতিটা row-এ     [401 502 603]]
                        প্রসারিত হয়

ভেতরে NumPy আসলে copy বানায় না — শুধু এমনভাবে হিসাব করে যেন ছোট array-টা বড়টার মাপে আছে। তাই memory লাগে না।

নিয়ম

দুটো shape ডান দিক থেকে মেলাও। প্রতিটা জোড়া dimension চলবে যদি:

  1. দুটো সমান, অথবা
  2. একটা 1, অথবা
  3. একটা নেই
(4, 3)  +  (3,)      ->  3 = 3 ✓, বাকিটা নেই ✓      ->  (4, 3)
(4, 3)  +  (4, 1)    ->  3 vs 1 ✓, 4 = 4 ✓          ->  (4, 3)
(4, 3)  +  (4,)      ->  3 vs 4 ✗                   ->  error!

শেষেরটা দেখো — 4টা row, আর 4টা মান, মনে হয় মেলা উচিত। কিন্তু নিয়ম ডান দিক থেকে মেলায়:

main.py

[:, None]: column vector বানানো

প্রতিটা row-তে আলাদা মান যোগ করতে চাইলে array-টাকে column বানাতে হবে — shape (4,) থেকে (4, 1):

main.py

দুটো 1D থেকে পুরো table

main.py

(3, 1) আর (4,) → (3, 4) — প্রতিটা জোড়ার হিসাব। গুণের table এক লাইনে!

Exercise

Exercise

প্রতিটা row-তে bias যোগ

+20 XP

Neural network-এর একটা layer-এর output: Z হলো 4×3 array (৪টা sample, ৩টা neuron)। প্রতিটা neuron-এর একটা bias আছে — b (৩টা মান)।

out = Z-এর প্রতিটা row-তে b যোগ করা ফলাফল। Loop বা np.tile ছাড়া — broadcasting দিয়ে।

solution.py

Quiz

  1. Q1(3, 4) shape-এর array-এর সাথে কোন shape-এর array broadcasting-এ যোগ করা যাবে?
  2. Q2a shape (3,) — a[:, None]-এর shape কী?
  3. Q3np.array([[1], [2]]) + np.array([10, 20, 30])-এর shape কী?
0/3 answered

Challenge

Challenge

Feature standardization

+50 XP

ML model-এ data দেওয়ার আগে প্রতিটা feature (column) standardize করা হয় — যাতে প্রতিটা column-এর গড় 0 আর standard deviation 1 হয়:

z = (x − column-এর গড়) / column-এর std

standardize(X) function লেখো (X একটা 2D array)। একটা সমস্যা: কোনো column-এর সব মান একই হলে std = 0 — শূন্য দিয়ে ভাগ! সেই column-গুলো 0 হয়ে যাবে। Loop ছাড়া।

solution.py

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

k-Nearest Neighbors-এর মূল হিসাব — একটা নতুন point থেকে সব training point-এর দূরত্ব, তারপর সবচেয়ে কাছেরগুলো:

main.py

points - query — (5, 2) থেকে (2,) বিয়োগ, broadcasting। এক লাইনে ৫টা দূরত্ব; ১০ লাখ point হলেও একই লাইন। Machine Learning module-এ KNN এভাবেই বানাবো।

Interview প্রশ্ন

  • Beginner: Broadcasting কী? একটা উদাহরণ দাও।
  • Intermediate: (5, 3) আর (5,) কেন broadcast হয় না? কীভাবে ঠিক করবে?
  • Advanced: Training data-র mean/std দিয়ে test data standardize করা হয় কেন, test data-র নিজের mean/std দিয়ে না? (Data leakage — test-এর তথ্য training-এ ঢুকে যায়।)

এরপর কী?

mean(axis=0) আগেই ব্যবহার করেছি — কিন্তু axis আসলে কী? Row ধরে নাকি column ধরে? পরের lesson: Aggregation: sum, mean, axis।