Mundarija (22)
- 1. Kirish va motivatsiya
- 2. Nazariya — chuqur tushuntirish
- 2.1. Kesish (slicing)
- 2.2. Ko'p o'lchamli indeks
- 2.3. Bool indeks (shartli)
- 2.4. Fancy indeks (ro'yxat bilan)
- 2.5. Ko'rinish (view) vs nusxa (copy)
- 2.6. Shartli o'zgartirish
- 2.7. Shakl kengaytirish (newaxis)
- 2.8. Indekslash — ma'lumot tanlash asosi
- 3. Tez ma'lumotnoma
- 4. Batafsil misollar
- Misol 1 — Kesish va ko'p o'lchamli indeks
- Misol 2 — Bool indeks (filtr)
- Misol 3 — Fancy indeks va view/copy
- Misol 4 — Amaliy: sensor ma'lumoti tanlash
- 5. To'g'ri va noto'g'ri tushunishlar
- 6. Keng tarqalgan xatolar va yechimlari
- 7. Integratsiya — bu bilim qayerda kerak bo'ladi
- 8. Eng yaxshi amaliyotlar
- 9. Amaliy topshiriq
- Xulosa
24.3-dars: NumPy — indeks va shakl
24-QISM — MA'LUMOT TAHLILI · 3-dars
1. Kirish va motivatsiya
24.1–24.2 da massiv yaratish va amalni ko'rdik. Endi real tahlilning eng ko'p uchraydigan ishi: massivning kerakli qismini tanlash. Jadvalning bir ustuni (barcha narxlar), shartga mos qatorlar (60'dan yuqori baholar), ma'lum indekslar (1, 5, 8-qatorlar). Bu — indekslash (indexing) va kesish (slicing).
NumPy indekslash Python ro'yxatidan kuchliroq: kesish (a[2:5]), ko'p o'lchamli (m[1, 2] — qator, ustun), bool indeks (a[a > 5] — shartga mos), fancy indeks (a[[1, 3, 5]] — ro'yxat bo'yicha). Muhim tushuncha: kesish ko'rinish (view) qaytaradi — nusxa emas (o'zgarish asl massivga ta'sir qiladi). Bu ma'lumot tanlash, filtrlash, o'zgartirishning asosi — pandas 24.7-bob da ham shu.
Real vaziyat. Bir tahlilda 10000 o'lchovdan faqat chegaradan oshganlarini (anomaliya) ajratib, ularni nolga tenglash kerak edi. Sikl bilan: for + if, sekin, uzun. Bool indeks bilan: a[a > chegara] = 0 (bir qator) — NumPy shartga mos elementlarni topdi va o'zgartirdi. Kod bir qatorga qisqardi, tez ishladi. Bool indeksni bilish — ma'lumot bilan ishlashning kaliti.
Bu darsda NumPy indeks va kesishni o'rganamiz.
Bu darsda:
- Kesish (slicing)
- Ko'p o'lchamli indeks
- Bool indeks (shartli)
- Fancy indeks (ro'yxat bilan)
- Ko'rinish (view) vs nusxa (copy)
- Shartli o'zgartirish
- Shakl kengaytirish (newaxis)
- Amaliy: ma'lumot tanlash
ℹ Misollarda NumPy (
import numpy as np) bilan sinaladi.
2. Nazariya — chuqur tushuntirish
2.1. Kesish (slicing)
Kesish — massiv qismini olish:
a = np.arange(10) # [0 1 2 3 4 5 6 7 8 9]
a[2:5] # [2 3 4] (2 dan 5 gacha)
a[:3] # [0 1 2] (boshdan)
a[7:] # [7 8 9] (oxiriga)
a[::2] # [0 2 4 6 8] (har ikkinchi)
a[-3:] # [7 8 9] (oxirgi 3) Kesish — a[boshi:oxiri:qadam] (Python ro'yxat kabi, 04.x): a[2:5] (2–4, 5 kirmaydi), a[:3] (boshdan), a[7:] (oxiriga), a[::2] (har ikkinchi), a[-3:] (oxirgi 3). Manfiy indeks — oxirdan. Kesish — massiv qismini tanlashning asosiy usuli.
2.2. Ko'p o'lchamli indeks
2D massivda qator va ustun:
m = np.arange(12).reshape(3, 4)
m[1, 2] # element (1-qator, 2-ustun)
m[0] # butun 0-qator
m[:, 1] # butun 1-ustun (barcha qator)
m[0:2, 1:3] # kichik jadval (qator 0-1, ustun 1-2) Ko'p o'lchamli indeks — vergul bilan: m[qator, ustun] (bir element), m[0] (butun qator), m[:, 1] (butun ustun — : barcha qator), m[0:2, 1:3] (kichik jadval). Bu 2D ma'lumot (jadval)dan qator, ustun, yoki bo'lakni tanlash. Ustun tanlash (m[:, i]) — pandas'da ustun tanlash kabi.
2.3. Bool indeks (shartli)
Shartga mos elementlarni tanlash:
a = np.array([1, 5, 3, 8, 2, 9])
a > 4 # [False True False True False True]
a[a > 4] # [5 8 9] (shartga mos)
a[(a > 2) & (a < 8)] # VA (& kerak, and emas)
a[(a < 2) | (a > 8)] # YOKI (|) Bool indeks — shart (bool massiv) bilan tanlash: a[a > 4] (4'dan katta elementlar). Bir necha shart: & (VA), | (YOKI) — qavs bilan ((a > 2) & (a < 8)), Python and/or emas. Bu ma'lumot filtrlashning asosi (24.7 pandas'da ham). Eng ko'p ishlatiladigan indeks turi.
2.4. Fancy indeks (ro'yxat bilan)
Ma'lum indekslarni ro'yxat bilan:
a = np.array([10, 20, 30, 40, 50])
a[[0, 2, 4]] # [10 30 50] (0, 2, 4-indeks)
a[[4, 0, 2]] # [50 10 30] (tartib ham)
m[[0, 2], [1, 3]] # (0,1) va (2,3) elementlar Fancy indeks — indekslar ro'yxati bilan tanlash: a[[0, 2, 4]] (ko'rsatilgan indekslar). Tartib muhim (a[[4, 0, 2]] — shu tartibda). Kesishdan farq: ixtiyoriy indekslar (ketma-ket emas). Fancy indeks nusxa qaytaradi (kesish — ko'rinish). Ma'lum qatorlarni tanlashda foydali.
2.5. Ko'rinish (view) vs nusxa (copy)
Muhim farq: kesish nusxa emas:
a = np.arange(5) # [0 1 2 3 4]
v = a[1:4] # ko'rinish (view)
v[0] = 99 # a ham o'zgaradi!
# a → [0 99 2 3 4]
c = a[1:4].copy() # nusxa
c[0] = 0 # a o'zgarmaydi Ko'rinish vs nusxa: kesish (slicing) ko'rinish (view) qaytaradi — asl massiv bilan bir xotirani bo'lishadi (view'ni o'zgartirsa, asl ham o'zgaradi). .copy() — mustaqil nusxa. Bu tuzoq: kesishni o'zgartirish kutilmagan ta'sir berishi mumkin. Nusxa kerak bo'lsa — .copy(). Bool/fancy indeks — nusxa.
2.6. Shartli o'zgartirish
Bool indeks bilan qiymatni o'zgartirish:
a = np.array([-1, 5, -3, 8, -2])
a[a < 0] = 0 # manfiylarni 0 ga
# a → [0 5 0 8 0]
a[a > 5] = 5 # 5'dan kattani 5 ga (chekla)
np.where(a < 0, 0, a) # yoki where (nusxa) Shartli o'zgartirish — bool indeks char tomonda: a[a < 0] = 0 (manfiylarni nolga). Bu ma'lumot tozalash (24.8 — noto'g'ri qiymatlar), cheklash (chegara), almashtirishda juda foydali. np.where — o'xshash, lekin nusxa qaytaradi (asl saqlanadi). Joyida (in-place) o'zgartirish — a[shart] = qiymat.
2.7. Shakl kengaytirish (newaxis)
Yangi o'lcham qo'shish:
a = np.array([1, 2, 3]) # shakl (3,)
a[:, np.newaxis] # shakl (3, 1) — ustun
a[np.newaxis, :] # shakl (1, 3) — qator
a.reshape(-1, 1) # (3, 1) — o'xshash Shakl kengaytirish — np.newaxis (yoki None) yangi o'lcham qo'shadi: a[:, np.newaxis] (1D → ustun (3,1)), a[np.newaxis, :] (qator (1,3)). reshape(-1, 1) — o'xshash (-1 avtomatik hisoblaydi). Bu broadcasting 24.2-bob uchun shaklni moslashda kerak (masalan, ustun broadcast).
2.8. Indekslash — ma'lumot tanlash asosi
Indekslash — ma'lumot tahlilining eng ko'p ishlatiladigan amali: kesish (bo'lak), ko'p o'lchamli (qator/ustun), bool (filtr), fancy (ma'lum indekslar). pandas 24.7-bob DataFrame indekslashi shu tamoyillarga asoslanadi (df[df.narx > 100] — bool indeks). "Kerakli qismini tanla, hammasini emas" — samarali tahlil asosi. View/copy farqini bilish — kutilmagan xatolarni oldini oladi.
3. Tez ma'lumotnoma
import numpy as np
# kesish (1D):
a[2:5]; a[:3]; a[7:]; a[::2]; a[-3:]
# ko'p o'lchamli (2D):
m[1, 2] # element
m[0] # qator · m[:, 1] # ustun
m[0:2, 1:3] # kichik jadval
# bool indeks (filtr):
a[a > 4]
a[(a > 2) & (a < 8)] # VA (& , qavs)
a[(a < 2) | (a > 8)] # YOKI (|)
# fancy indeks:
a[[0, 2, 4]]
# view vs copy:
v = a[1:4] # ko'rinish (asl o'zgaradi)
c = a[1:4].copy() # nusxa
# shartli o'zgartirish:
a[a < 0] = 0
# shakl:
a[:, np.newaxis] # ustun (3,1)Indeks xulosasi
Kesish: a[b:o:q] (view) · 2D: m[qator, ustun] · bool: a[a>4] (filtr)
fancy: a[[i,j]] (nusxa) · view o'zgarish → asl · copy() mustaqil
shartli: a[shart]=qiymat4. Batafsil misollar
Misollarda NumPy (
import numpy as np) bilan sinaladi.
Misol 1 — Kesish va ko'p o'lchamli indeks
"""kesish: a[b:o:q] (1D); ko'p o'lchamli: m[qator,ustun], m[:,i] (ustun), m[b:o, b:o]."""
import numpy as np
def main() -> None:
a = np.arange(10)
print("=== 1. 1D kesish ===")
print(f" a = {a.tolist()}")
print(f" a[2:5] = {a[2:5].tolist()}")
print(f" a[::2] = {a[::2].tolist()}")
print(f" a[-3:] = {a[-3:].tolist()}")
print("\n=== 2. 2D element va qator/ustun ===")
m = np.arange(12).reshape(3, 4)
print(f" m = {m.tolist()}")
print(f" m[1,2] = {m[1, 2]}")
print(f" m[0] (qator) = {m[0].tolist()}")
print(f" m[:,1] (ustun) = {m[:, 1].tolist()}")
print("\n=== 3. 2D kichik jadval ===")
print(f" m[0:2, 1:3] = {m[0:2, 1:3].tolist()}")
print("\n=== 4. Oxirgi ustun va qator ===")
print(f" m[:,-1] (oxirgi ustun) = {m[:, -1].tolist()}")
print(f" m[-1] (oxirgi qator) = {m[-1].tolist()}")
print(" ⭐ kesish — massiv qismini tanlash (1D, 2D)")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. 1D kesish ===
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a[2:5] = [2, 3, 4]
a[::2] = [0, 2, 4, 6, 8]
a[-3:] = [7, 8, 9]
=== 2. 2D element va qator/ustun ===
m = [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]
m[1,2] = 6
m[0] (qator) = [0, 1, 2, 3]
m[:,1] (ustun) = [1, 5, 9]
=== 3. 2D kichik jadval ===
m[0:2, 1:3] = [[1, 2], [5, 6]]
=== 4. Oxirgi ustun va qator ===
m[:,-1] (oxirgi ustun) = [3, 7, 11]
m[-1] (oxirgi qator) = [8, 9, 10, 11]
⭐ kesish — massiv qismini tanlash (1D, 2D)Nima ko'rsatdi: 2.1, 2.2-bo'limlar.
Misol 2 — Bool indeks (filtr)
"""bool indeks: a[a>4] (shart), & (VA), | (YOKI); shartli o'zgartirish a[shart]=qiymat."""
import numpy as np
def main() -> None:
a = np.array([1, 5, 3, 8, 2, 9, 4, 7])
print("=== 1. Oddiy bool indeks ===")
print(f" a = {a.tolist()}")
print(f" a > 4 = {(a > 4).tolist()}")
print(f" a[a > 4] = {a[a > 4].tolist()}")
print("\n=== 2. VA (&) — oraliq ===")
print(f" a[(a>2)&(a<8)] = {a[(a > 2) & (a < 8)].tolist()}")
print("\n=== 3. YOKI (|) — chekkalar ===")
print(f" a[(a<3)|(a>7)] = {a[(a < 3) | (a > 7)].tolist()}")
print("\n=== 4. Shartli o'zgartirish ===")
b = a.copy()
b[b < 5] = 0 # 5'dan kichikni 0 ga
print(f" b[b<5]=0 → {b.tolist()}")
print(f" shartga mos soni: {(a > 4).sum()}")
print(" ⭐ bool indeks — filtr va shartli o'zgartirish")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Oddiy bool indeks ===
a = [1, 5, 3, 8, 2, 9, 4, 7]
a > 4 = [False, True, False, True, False, True, False, True]
a[a > 4] = [5, 8, 9, 7]
=== 2. VA (&) — oraliq ===
a[(a>2)&(a<8)] = [5, 3, 4, 7]
=== 3. YOKI (|) — chekkalar ===
a[(a<3)|(a>7)] = [1, 8, 2, 9]
=== 4. Shartli o'zgartirish ===
b[b<5]=0 → [0, 5, 0, 8, 0, 9, 0, 7]
shartga mos soni: 4
⭐ bool indeks — filtr va shartli o'zgartirishNima ko'rsatdi: 2.3, 2.6-bo'limlar.
Misol 3 — Fancy indeks va view/copy
"""fancy indeks: a[[i,j,k]] (ro'yxat, nusxa); view (kesish — asl o'zgaradi) vs copy (mustaqil)."""
import numpy as np
def main() -> None:
print("=== 1. Fancy indeks (ro'yxat bilan) ===")
a = np.array([10, 20, 30, 40, 50])
print(f" a[[0,2,4]] = {a[[0, 2, 4]].tolist()}")
print(f" a[[4,0,2]] = {a[[4, 0, 2]].tolist()} (tartib)")
print("\n=== 2. View (kesish — asl bilan bog'liq) ===")
x = np.arange(5)
v = x[1:4]
v[0] = 99
print(f" view o'zgargach x = {x.tolist()} (x[1] ham o'zgardi)")
print("\n=== 3. Copy (mustaqil nusxa) ===")
y = np.arange(5)
c = y[1:4].copy()
c[0] = 99
print(f" copy o'zgargach y = {y.tolist()} (o'zgarmadi)")
print("\n=== 4. Fancy indeks — nusxa ===")
z = np.arange(5)
f = z[[1, 2, 3]]
f[0] = 99
print(f" fancy o'zgargach z = {z.tolist()} (fancy — nusxa)")
print(" ⭐ kesish=view (bog'liq), copy/fancy=nusxa (mustaqil)")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Fancy indeks (ro'yxat bilan) ===
a[[0,2,4]] = [10, 30, 50]
a[[4,0,2]] = [50, 10, 30] (tartib)
=== 2. View (kesish — asl bilan bog'liq) ===
view o'zgargach x = [0, 99, 2, 3, 4] (x[1] ham o'zgardi)
=== 3. Copy (mustaqil nusxa) ===
copy o'zgargach y = [0, 1, 2, 3, 4] (o'zgarmadi)
=== 4. Fancy indeks — nusxa ===
fancy o'zgargach z = [0, 1, 2, 3, 4] (fancy — nusxa)
⭐ kesish=view (bog'liq), copy/fancy=nusxa (mustaqil)Nima ko'rsatdi: 2.4, 2.5-bo'limlar.
Misol 4 — Amaliy: sensor ma'lumoti tanlash
Real misol: sensor o'lchovlari — anomaliya topish (bool), tanlash (fancy), tozalash (shartli). Bu — ma'lumot tanlash va tozalashning namunasi.
"""to'liq tanlash: sensor o'lchovlar, bool filtr (anomaliya), shartli tozalash (chegara), statistika."""
import numpy as np
def main() -> None:
# 12 soatlik harorat o'lchovlari (ba'zisi xato: -99, 200)
harorat = np.array([21, 22, -99, 23, 24, 200, 22, 21, 20, -99, 23, 22])
print("=== 1. Xato qiymatlarni topish (bool) ===")
xato = (harorat < -50) | (harorat > 60)
print(f" xato o'lchovlar soni: {xato.sum()}")
print(f" xato qiymatlar: {harorat[xato].tolist()}")
print("\n=== 2. Tozalash (xatoni o'rtacha bilan almashtirish) ===")
toza = harorat.copy()
normal = toza[(toza >= -50) & (toza <= 60)]
ortacha = int(normal.mean())
toza[xato] = ortacha
print(f" toza: {toza.tolist()}")
print("\n=== 3. Statistika (toza ma'lumot) ===")
print(f" o'rtacha: {round(float(toza.mean()), 1)}")
print(f" eng yuqori: {toza.max()}, eng past: {toza.min()}")
print("\n=== 4. Ma'lum soatlar (fancy indeks) ===")
tanlangan = toza[[0, 6, 11]] # 0, 6, 11-soat
print(f" 0,6,11-soat: {tanlangan.tolist()}")
issiq = (toza > ortacha).sum()
print(f" o'rtachadan issiq soatlar: {issiq}")
print(" ⭐ bool/fancy indeks — ma'lumot tanlash va tozalash")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Xato qiymatlarni topish (bool) ===
xato o'lchovlar soni: 3
xato qiymatlar: [-99, 200, -99]
=== 2. Tozalash (xatoni o'rtacha bilan almashtirish) ===
toza: [21, 22, 22, 23, 24, 22, 22, 21, 20, 22, 23, 22]
=== 3. Statistika (toza ma'lumot) ===
o'rtacha: 22.0
eng yuqori: 24, eng past: 20
=== 4. Ma'lum soatlar (fancy indeks) ===
0,6,11-soat: [21, 22, 22]
o'rtachadan issiq soatlar: 3
⭐ bool/fancy indeks — ma'lumot tanlash va tozalashNima ko'rsatdi: 2.1–2.8-bo'limlar.
5. To'g'ri va noto'g'ri tushunishlar
| Noto'g'ri fikr | To'g'risi |
|---|---|
| "Kesish nusxa" | Ko'rinish (view — bog'liq) |
"a[a>4] — sikl" |
Bool indeks (vektorlangan) |
"and bilan bool" |
& (qavs bilan) |
| "Fancy indeks — view" | Nusxa (mustaqil) |
"m[:, 1] — qator" |
Ustun (barcha qator, 1-ustun) |
| "View o'zgartsa asl saqlanadi" | Asl ham o'zgaradi |
| "Indeks 1 dan" | 0 dan (Python) |
| "Shartli o'zgartirish sikl" | a[shart] = qiymat |
6. Keng tarqalgan xatolar va yechimlari
1. View'ni nusxa deb o'ylash
v = a[1:4]; v[0] = 0 # ⚠️ a ham o'zgaradi
c = a[1:4].copy() # ✅ mustaqil2. Bool indeksda and/or
a[(a>2) and (a<8)] # ⚠️ xato (massiv and)
a[(a>2) & (a<8)] # ✅ (& , qavs)3. Qavssiz &
a[a > 2 & a < 8] # ⚠️ ustunlik xato
a[(a > 2) & (a < 8)] # ✅ qavs4. axis/o'lcham chalkashtirish
m[1] # qator · m[:, 1] # ustun # ✅ farqni bil5. Chegaradan tashqari indeks
a[100] # ⚠️ IndexError
a[a < len(a)] # yoki tekshir # ✅6. Fancy indeksda shakl kutmaslik
a[[0, 2, 4]] # nusxa ( tartib saqlanadi)7. Kesishda oxiri kirmasligi
a[2:5] # 2,3,4 (5 KIRMAYDI) — ehtiyot7. Integratsiya — bu bilim qayerda kerak bo'ladi
- 24.2-dars (o'tilgan): Broadcasting — shakl (newaxis)
- 24.4-dars: Unumdorlik — view (nusxasiz tez)
- 24.7-dars: pandas tanlash — bool indeks
- 24.8-dars: pandas tozalash — shartli o'zgartirish
- 25-qism: ML — ma'lumot bo'lish (train/test)
8. Eng yaxshi amaliyotlar
Filtr — bool indeks (
a[a > x]).Bir necha shart —
&/|qavs bilan.Nusxa kerak bo'lsa —
.copy()(view emas).Ustun —
m[:, i], qator —m[i].Shartli o'zgartirish —
a[shart] = qiymat.Fancy indeks — ma'lum indekslar (nusxa).
Kesishda oxiri kirmaydi (2:5 → 2,3,4).
Shakl broadcast uchun —
newaxis.
9. Amaliy topshiriq
Vazifa 1: Bashorat qiling
1. # Kesish nima?
2. # a[2:5] — nima?
3. # m[:, 1] — nima?
4. # bool indeks nima?
5. # a[a>4] — nima?
6. # & va | nima?
7. # fancy indeks nima?
8. # view nima?
9. # copy nima?
10. # view o'zgartsa asl-chi?
11. # shartli o'zgartirish?
12. # newaxis nima?Javoblar
- Massiv qismini olish
- 2,3,4-elementlar (5 kirmaydi)
- 1-ustun (barcha qator)
- Shart bilan tanlash
- 4'dan katta elementlar
- VA / YOKI (bool, qavs bilan)
- Indekslar ro'yxati bilan
- Ko'rinish (asl bilan bog'liq)
- Mustaqil nusxa
- Asl ham o'zgaradi
a[shart] = qiymat- Yangi o'lcham qo'shish
Vazifa 2: Xatolarni tuzating
1. a[(a>2) and (a<8)] # &
2. a[a > 2 & a < 8] # qavs
3. v = a[1:4]; v[0]=0 # copy (asl saqlash)
4. m[1] # ustun kerak # m[:,1]
5. a[2:5] # 2,3,4,5 kutildi # oxiri kirmaydiJavoblar
1. a[(a>2) & (a<8)]
2. a[(a > 2) & (a < 8)]
3. c = a[1:4].copy(); c[0]=0
4. m[:, 1] # ustun
5. a[2:6] # 5 kerak bo'lsaVazifa 3: Kesish
Tanlash:
- 1D kesish
- 2D qator/ustun
- Kichik jadval
- Qadam (
::2)
Vazifa 4: Bool indeks
Filtr:
- Oddiy shart
&(VA)|(YOKI)- Shartli o'zgartirish
Vazifa 5: View/copy
Farq:
- View (kesish)
- O'zgartir — asl-chi?
- Copy
- Fancy (nusxa)
Vazifa 6: Amaliy tozalash
Ma'lumot:
- Xato qiymat (bool)
- Almashtirish
- Statistika
- Fancy tanlash
Vazifa 7: O'ylash
NumPy kesish ko'rinish (view) qaytaradi — asl massiv bilan bir xotirani bo'lishadi (nusxa emas). Bu tezlik uchun (nusxa ko'chirish yo'q), lekin tuzoq: view'ni o'zgartirish asl massivga ta'sir qiladi. Nima uchun NumPy nusxa o'rniga view'ni tanlaydi (tezlik/xotira), va bu "aniq nusxa" (explicit copy) tamoyili bilan qanday bog'liq — nega "view — standart, copy — aniq so'ralgan" dizayni mantiqli?
Javob
Qisqa javob: NumPy kesish view (ko'rinish) qaytaradi — asl bilan bir xotirani bo'lishadi, nusxa ko'chirmaydi. Sabab: tezlik va xotira — katta massivda kesish nusxa bo'lsa, har kesish xotirani ko'chiradi (sekin, RAM). View — bepul (faqat "oyna"). Lekin tuzoq: view'ni o'zgartirish asl massivga ta'sir qiladi (kutilmagan). Shu sabab NumPy "view — standart, copy — aniq (.copy())" dizaynini tanladi: eng ko'p holda o'qish (view yetarli, tez), o'zgartirish kerak bo'lganda aniq .copy() (dasturchi niyati aniq). "Aniq nusxa" tamoyili — nusxa qimmat, shuning uchun aniq so'ralgan bo'lsin (yashirin emas). Bu "standart — arzon, qimmat — aniq" dizayn falsafasi.
1. View — tez, arzon
Kesish view — asl massiv "oynasi" (yangi xotira yo'q). Katta massivda bu muhim: nusxa = xotira + vaqt, view = bepul.
2. Tuzoq — kutilmagan ta'sir
View'ni o'zgartirsa, asl o'zgaradi. Buni bilmasangiz — xato (v[0]=0 asl massivni buzadi).
3. Nega "view standart, copy aniq"
| Amal | Standart |
|---|---|
| O'qish (ko'p holda) | View (tez) |
| O'zgartirish | Aniq .copy() |
Eng ko'p holda o'qish (view yetarli). O'zgartirish — kamroq va aniq (dasturchi .copy() yozadi — niyat aniq).
4. "Aniq nusxa" tamoyili
Nusxa qimmat (xotira, vaqt) — shuning uchun yashirin emas, aniq. Dasturchi nusxa kerak deb qaror qiladi (.copy()). Standart — arzon (view); qimmat — aniq so'ralgan.
5. Muhandislik saboqlari
- Standart — arzon amal (view — tez)
- Qimmat amal — aniq so'ralgan (copy)
- View tuzog'ini bil (asl o'zgaradi)
- Nusxa kerak bo'lsa —
.copy()
6. Xulosa
- Kesish — view (tez, xotira arzon)
- Tuzoq — view o'zgartsa asl o'zgaradi
- "View standart, copy aniq" — mantiqli
- Qimmat amal — aniq so'ralgan
Nimani mustahkamlaydi: 2.1–2.8-bo'limlar.
Xulosa
Bu darsda NumPy indeks va kesishni o'rgandik.
Eng muhim uch fikr:
Kesish va ko'p o'lchamli indeks. Kesish —
a[boshi:oxiri:qadam](a[2:5]— 2,3,4; oxiri kirmaydi;a[::2]har ikkinchi;a[-3:]oxirgi 3). Ko'p o'lchamli indeks — vergul bilan:m[qator, ustun](element),m[0](qator),m[:, 1](ustun —:barcha qator),m[0:2, 1:3](kichik jadval). Bu jadvaldan qator, ustun, bo'lakni tanlash — pandas'da ustun tanlash kabi.Bool indeks va shartli o'zgartirish. Bool indeks — shart bilan:
a[a > 4](mos elementlar); bir necha shart&(VA),|(YOKI) — qavs bilan ((a > 2) & (a < 8)), Pythonand/oremas. Shartli o'zgartirish — bool indeks char tomonda:a[a < 0] = 0(manfiylarni nolga). Fancy indeks — indekslar ro'yxati (a[[0, 2, 4]]— tartib muhim, nusxa qaytaradi). Bu ma'lumot filtrlash va tozalashning asosi (24.7–24.8).View vs copy — muhim farq. Kesish (slicing) ko'rinish (view) qaytaradi — asl massiv bilan bir xotirani bo'lishadi (view'ni o'zgartirsa, asl ham o'zgaradi).
.copy()— mustaqil nusxa; bool/fancy indeks ham nusxa. NumPy "view standart, copy aniq" dizayni — tezlik/xotira uchun (nusxa qimmat, shuning uchun aniq.copy()so'ralgan). Bu tuzoq: view'ni o'zgartirish kutilmagan ta'sir berishi mumkin.np.newaxis— shakl kengaytirish (broadcasting uchun). Indekslash — ma'lumot tanlashning eng ko'p ishlatiladigan amali.
Keyingi darsda NumPy unumdorlik ni o'rganamiz: vektorlashtirish nega tez, xotira tejash, dtype tanlovi — katta ma'lumot bilan samarali ishlash.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!