Bu modulda NumPy kutubxonasining poydevori qo’yildi: array nima, uni qanday yaratish, tuzilishini qanday o’qish va elementlariga qanday murojaat qilish.
NumPy nima va nega kerak
NumPy (Numerical Python) — sonli hisob-kitoblar uchun asosiy Python kutubxonasi. Uning markaziy tushunchasi ndarray — bir xil turdagi elementlarni xotirada zich saqlaydigan ko’p o’lchovli massiv. Oddiy Python listidan farqli, NumPy amallari butun massiv ustida birdaniga, C tilida yozilgan tez kod bilan bajariladi — bunga vektorlashgan amal deyiladi.
import numpy as np
narxlar = np.array([120, 340, 95, 410])
print(narxlar * 1.12)
Natija:
[134.4 380.8 106.4 459.2]
Xuddi shu ishni list bilan qilish uchun sikl yozish kerak bo’lardi. Katta hajmdagi ma’lumotda (million element) NumPy o’nlab-yuzlab barobar tez ishlaydi.
Ko’p uchraydigan xato — import numpy deb yozib, keyin np.array ishlatish: NameError: name 'np' is not defined. Hamma joyda qabul qilingan uslub — import numpy as np.
Array yaratish
Arrayni tayyor listdan yoki maxsus funksiyalar bilan yaratish mumkin:
a = np.array([1, 2, 3]) # listdan
z = np.zeros((2, 3)) # 2x3, hammasi 0.0
o = np.ones(4) # [1. 1. 1. 1.]
r = np.arange(2, 10, 2) # [2 4 6 8] — 10 kirmaydi!
l = np.linspace(0, 1, 5) # [0. 0.25 0.5 0.75 1. ]
arange(start, stop, step) xuddi range kabi ishlaydi — stop qiymati natijaga kirmaydi. linspace(start, stop, n) esa aksincha: ikkala chetni ham qo’shib, oraliqni teng n nuqtaga bo’ladi. Bu ikkisini adashtirish — eng ko’p uchraydigan boshlang’ich xato.
Yana bir tuzoq: np.array(1, 2, 3) deb yozish TypeError beradi — funksiya bitta list kutadi: np.array([1, 2, 3]).
Shakl va o’lcham: shape, ndim, size, dtype
Har bir array o’zining tuzilishi haqidagi ma’lumotni atributlarda saqlaydi:
m = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
print(m.shape) # (3, 4) — 3 qator, 4 ustun
print(m.ndim) # 2 — o'lchamlar soni
print(m.size) # 12 — jami elementlar
print(m.dtype) # int64 — element turi
shape — tuple: (qatorlar, ustunlar). size doim shape elementlarining ko’paytmasiga teng (3 × 4 = 12). dtype bitta butun arrayga tegishli: NumPy’da bitta arrayda aralash turlar bo’lmaydi — np.array([1, "a"]) hamma elementni matnga aylantirib yuboradi, bu ko’pincha kutilmagan xato manbai.
Indekslash va kesish
Indekslash listdagidek, lekin ko’p o’lchovli arrayda vergul bilan qisqa yoziladi:
m[0, 2] # 1-qator, 3-ustun -> 3
m[1] # butun 2-qator -> [5 6 7 8]
m[:, 0] # butun 1-ustun -> [1 5 9]
m[0:2, 1:3] # yuqori 2 qator, o'rtadagi 2 ustun
m[-1] # oxirgi qator
Muhim farq: kesim (slice) nusxa emas, ko’rinish (view) qaytaradi. Ya’ni kesimni o’zgartirsangiz, asl array ham o’zgaradi:
a = np.array([1, 2, 3, 4, 5])
b = a[1:4]
b[0] = 99
print(a)
Natija:
[ 1 99 3 4 5]
Mustaqil nusxa kerak bo’lsa — a[1:4].copy(). Bu xato jimgina o’tib ketadi (hech qanday ogohlantirish yo’q), shuning uchun uni bilish ayniqsa muhim.
List va ndarray taqqoslash
| Xususiyat | Python list | NumPy ndarray |
|---|---|---|
| Element turlari | aralash bo’lishi mumkin | bitta dtype |
* 2 amali |
listni ikki marta takrorlaydi | har elementni 2 ga ko’paytiradi |
| Tezlik (katta hajmda) | sekin (sikl kerak) | tez (vektorlashgan) |
| Kesim | nusxa qaytaradi | ko’rinish (view) qaytaradi |
| Ko’p o’lchov | ichma-ich listlar | tabiiy (shape) |
Amaliyot
- 0 dan 100 gacha 5 qadam bilan array yarating (
arange), so’ng xuddi shu oraliqnilinspacebilan 21 nuqtaga bo’ling — ikkala natijani solishtiring. - Haftalik harorat ma’lumotini (7 ta son) array qiling:
shape,sizevadtypeni chiqaring, so’ng faqat ish kunlari (dastlabki 5 element) kesimini oling. - 4×5 o’lchamli nol matritsa yarating, uning 1-qatorini birlarga, oxirgi ustunini 9 ga tenglang.
a = np.arange(10)danb = a[2:7]kesim oling,b[0] = 100deb o’zgartiring vaanima bo’lganini tushuntiring; keyin xuddi shuni.copy()bilan takrorlang.- 3×3 matritsada burchakdagi 4 ta elementni bitta kesim ifodasi bilan oling (
m[::2, ::2]).
Modulni yakunlash uchun keyingi darsdagi testni ishlang.