Barcha kurslar Yo'nalishlar Reyting Kirish Ro'yxatdan o'tish

Bu modul NumPy bilan haqiqiy ish: massiv ustida hisob-kitob, tuzilmani o’zgartirish, tasodifiy sonlar, saralash-filtrlash va Pandas’ga o’tish ko’prigi.

Matematik amallar va axis

Arifmetik amallar element bo’yicha ishlaydi, agregat funksiyalar esa butun massivni bitta songa (yoki qator/ustun bo’yicha massivga) yig’adi:

import numpy as np

savdo = np.array([[120, 90, 140],
                  [200, 150, 180]])   # 2 filial, 3 kun

print(savdo.sum())          # 880  — hammasi
print(savdo.sum(axis=0))    # [320 240 320] — har KUN bo'yicha (ustunlar)
print(savdo.sum(axis=1))    # [350 530]     — har FILIAL bo'yicha (qatorlar)
print(savdo.mean(), savdo.max(), savdo.std())

axis — eng ko’p adashtiradigan tushuncha. Qoida: axis=0 — amal qatorlar bo’ylab pastga ketadi (natija: har ustun uchun bitta son), axis=1 — ustunlar bo’ylab o’ngga (natija: har qator uchun bitta son).

Amal Natija shakli (2×3 uchun) Ma’nosi
sum() skalyar butun massiv yig’indisi
sum(axis=0) (3,) har bir ustun yig’indisi
sum(axis=1) (2,) har bir qator yig’indisi

O’lchami mos ikki array ustida amal ham element bo’yicha: a + b, a * b (bu matritsa ko’paytmasi EMAS — u a @ b).

Tuzilmani o’zgartirish: reshape, flatten, T

a = np.arange(12)          # [0 1 2 ... 11], shape (12,)
m = a.reshape(3, 4)        # 3x4 matritsa
n = a.reshape(3, -1)       # -1: "qolganini o'zing hisobla" -> 3x4
f = m.flatten()            # yana tekis (12,) — nusxa
t = m.T                    # transpozitsiya: 4x3

reshape uchun elementlar soni mos kelishi shart: 12 elementni reshape(5, 3) qilsangiz — ValueError: cannot reshape array of size 12 into shape (5,3). -1 ni faqat bitta o’lchamda ishlatish mumkin — NumPy uni qolgan o’lchamlardan kelib chiqib o’zi hisoblaydi.

Tasodifiy sonlar

rng = np.random.default_rng(seed=42)   # zamonaviy usul
print(rng.integers(1, 7, size=5))      # 5 ta zar tashlash
print(rng.random((2, 2)))              # 0..1 oralig'ida 2x2
print(rng.normal(0, 1, 3))             # normal taqsimot

Natija:

[1 5 4 4 2]
[[0.22733602 0.31675834]
 [0.79736546 0.67625467]]
[ 0.7611397  -0.86446043  0.14404357]

seed — tasodifiylikning boshlang’ich nuqtasi: bir xil seed bilan dastur har safar bir xil "tasodifiy" sonlarni beradi. Bu ilmiy ishda va darslarda natijani takrorlanadigan qilish uchun kerak. Eski uslub (np.random.seed(42) + np.random.rand(...)) ham keng uchraydi — videolardagi kod shu ko’rinishda bo’lishi mumkin, ikkalasi ham ishlaydi.

Saralash va filtrlash

a = np.array([40, 10, 55, 25])
print(np.sort(a))       # [10 25 40 55] — yangi array
print(np.argsort(a))    # [1 3 0 2] — saralangan tartib indekslari
a.sort()                # joyida saralaydi (asl o'zgaradi!)

Filtrlashning kaliti — mantiqiy niqob (boolean mask): taqqoslash amali True/False massiv qaytaradi, uni indeks sifatida bersangiz, faqat True bo’lgan elementlar qoladi:

ballar = np.array([56, 90, 71, 44, 88])
print(ballar > 70)            # [False  True  True False  True]
print(ballar[ballar > 70])    # [90 71 88]
print(np.where(ballar > 70, "o'tdi", "yiqildi"))

Ikki shartni birlashtirishda and/or EMAS, &/| ishlatiladi va har bir shart qavsga olinadi: ballar[(ballar > 50) & (ballar < 90)]. and yozsangiz — ValueError: The truth value of an array ... is ambiguous.

NumPy va Pandas birgalikda

Pandas ichida NumPy yotadi: DataFrame ustunlari aslida NumPy massivlari. Shuning uchun ular orasida o’tish bir qadam:

import pandas as pd

df = pd.DataFrame({"narx": [120, 340, 95], "soni": [3, 1, 7]})
X = df.to_numpy()          # DataFrame -> 2D array
s = df["narx"].to_numpy()  # ustun -> 1D array
df2 = pd.DataFrame(np.arange(6).reshape(2, 3), columns=["a", "b", "c"])

NumPy’da o’rgangan hamma narsa — axis, mask bilan filtrlash, agregatlar — Pandas’da xuddi shu mantiq bilan ishlaydi. Keyingi kurs aynan shu poydevor ustiga quriladi.

Amaliyot

  1. 1 dan 24 gacha sonlarni reshape bilan 4×6 matritsa qiling; har qator va har ustun yig’indisini axis bilan hisoblang.
  2. default_rng(7) bilan 100 ta talabaning ballarini (0–100 oralig’ida butun son) generatsiya qiling; o’rtacha va standart og’ishni toping.
  3. Shu ballardan 60 dan pastlarini mask bilan ajratib oling va ular necha foizni tashkil qilishini hisoblang.
  4. Ballarni kamayish tartibida saralang (maslahat: np.sort(...)[::-1]) va eng yuqori 10 tasini oling.
  5. Ballar arrayidan pd.DataFrame yasang, unga holat ustuni qo’shing: np.where(ball >= 60, "o’tdi", "yiqildi").

Modul testi keyingi darsda — konspektdagi misollarni o’zingiz terib ko’rgan bo’lsangiz, savollar oson tuyuladi.

Amallar — konspekt

Amallar Maqola

NumPy amallari konspekti: matematik va agregat funksiyalar, axis, reshape, random, saralash va filtrlash, Pandas bilan bog’lanish.

Eslatma yozish uchun saytga kiring.

Resurslar hozircha qo'shilmagan

O'qituvchi dars uchun qo'shimcha materiallarni qo'shganida shu yerda paydo bo'ladi.

Savol berish uchun saytga kiring.

Hozircha savollar yo'q

Bu dars yuzasidan birinchi savolni siz bering.