
🌟 Mastering NumPy — From Basics to Interview-Ready!
🧠 Introduction
NumPy (Numerical Python).
It’s the foundation of almost every analytical and ML operation — efficient, powerful, and surprisingly elegant.
Let’s go step-by-step with examples.
⚙️ Quick Setup & Why NumPy
Install it easily:
pip install numpy
Why NumPy?
Efficient, typed arrays (
ndarray) — compact and lightning-fast.Vectorized operations — no slow Python loops.
Broadcasting rules — work with arrays of different shapes easily.
💬 “Why not just use Python lists?”
NumPy arrays store homogeneous types and support vectorized math, making them faster and memory-efficient compared to Python lists.
🔸 Arrays vs Python Lists
import numpy as np
lst = list(range(10))
print(lst)
arr = np.arange(10)
print(arr)
Output:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
Key Differences
| Feature | Python List | NumPy Array |
| Data type | Mixed allowed | Single dtype |
| Arithmetic | Requires loops | Element-wise and fast |
| Memory | Higher | Optimized (C-based) |
In short:
👉 NumPy arrays = speed + simplicity.
🧩 Creating Arrays & Matrices
Let’s create a 5×5 matrix with values from 1 to 25:
mat1 = np.arange(1,26).reshape(5,5)
print(mat1)
Output:
[[ 1 2 3 4 5]
[ 6 7 8 9 10]
[11 12 13 14 15]
[16 17 18 19 20]
[21 22 23 24 25]]
Quick Concept: arange vs linspace
np.arange(start, stop)→ steps by 1 (or given step), stop excluded.np.linspace(start, stop, num)→ divides range intonumequal intervals (stop included).
Tip: Mention this difference if asked in an interview — it shows clarity and precision. 😉
🎯 Indexing & Slicing
Extract the middle 3×3 matrix:
mat2 = mat1[1:4, 1:4]
print(mat2)
Result:
[[ 7 8 9]
[12 13 14]
[17 18 19]]
Concept:
Python uses zero-based indexing.
a:bmeans start at a, end before b.
So, mat1[1:4, 1:4] selects rows 1–3 and columns 1–3.
💡 Bonus:
To pick the center element, use:
mat1[2, 2] # returns 13
📊 Aggregations — Sum & Mean
Sum of Each Row
row_sum = np.sum(mat1, axis=1)
print("Row wise sum:", row_sum)
Output:
Row wise sum: [ 15 40 65 90 115]
Mean of Each Column
col_mean = np.mean(mat1, axis=0)
print("Column wise mean:", col_mean)
Output:
Column wise mean: [11. 12. 13. 14. 15.]
Understanding axis
| Axis | Operation Direction | Description |
axis=0 | ↓ (column-wise) | Collapses rows |
axis=1 | → (row-wise) | Collapses columns |
Note:
If you just call mat1.sum() (without axis), it sums all elements and returns a scalar.
🔍 Boolean Indexing — Conditional Selection
Let’s find values greater than 20:
high_values = mat1[mat1 > 20]
print("High values above 20:", high_values)
Output:
High values above 20: [21 22 23 24 25]
How it works
mat1 > 20→ creates a boolean mask (True/False values).mat1[mask]→ returns only elements where mask isTrue.
Example mask:
[[False False ...]
[False False ...]
[False False ...]
[False False ...]
[ True True True True True]]
💬 In simple words:
This mask works like a filter — wherever the condition is True, those values get selected.
Thoda sa logic samajh lo, aur tum boolean indexing ke master ban jaoge 😄
💬 Common Questions
Q1: What is broadcasting?
A: It’s NumPy’s way of doing arithmetic on arrays of different shapes by automatically expanding them along missing dimensions.
Q2: How to reshape without copying data?
A: arr.reshape() returns a view if possible; use arr.copy() for a deep copy.
Q3: How to combine arrays?
A: Use np.concatenate, np.vstack, or np.hstack.
Q4: How to get unique elements?
A: np.unique(arr)
Q5: How to handle NaN values?
A: Use np.nanmean, np.nansum, or filter them before aggregation.
🧭 Best Practices
✅ Use .shape to verify dimensions
✅ Check dtype regularly
✅ Avoid Python loops — prefer vectorized ops
✅ Be careful with views vs copies
✅ Print small samples while debugging
🏁 Final Words
NumPy is not just a library — it’s the language of data in Python.
Har din thoda practice, aur jaldi hi aap bolenge — “NumPy? Easy yaar!” 😎
Comments
Join the discussionNo comments yet. Be the first to comment.