סביבת פיתוח חינמית וחזקה שניתן להתקין במחשב האישי.
anaconda.com/downloadוקטורים ב-Python וב-NumPy
מייצוג ברשימה ועד slicing, aliasing, וקטורים מיוחדים, הפרשים וגרפים.
[1, 2, 3]
np.array([1,2,3])
סביבת עבודה
הקורס מציג שתי אפשרויות: התקנה מקומית או עבודה בדפדפן.
אינו דורש התקנה; במצגת הוא מוצג כאפשרות המועדפת.
colab.research.google.comהקישור המקורי מן השקופיות.
Open course documentוקטור כרשימת Python
הייצוג הפשוט ביותר.
x = [10, 20, 30, 40] print(x[0]) # 10 — האיבר הראשון print(x[2]) # 30 print(x[-1]) # 40 — האיבר האחרון
-1 מחזיר את האיבר האחרון.הגדרת וקטור באמצעות NumPy
כאשר חשובה יעילות ועבודה מתמטית על מערכים.
import numpy as np x = np.array([10, 20, 30, 40]) x[1] = 99 print(x) # [10 99 30 40]
למה NumPy?
תחביר מתמטי קצר, פעולות וקטוריות יעילות, ניהול ממדים ויכולת לעבוד עם מטריצות ונתונים גדולים.
העתקה מול ALIASING
פעולת השמה אינה תמיד יוצרת עותק חדש.
Aliasing
x = np.array([1, 2, 3]) y = x y[0] = 99 print(x) # [99 2 3]
עותק אמיתי
x = np.array([1, 2, 3]) y = x.copy() y[0] = 99 print(x) # [1 2 3]
.copy() כאשר אתם צריכים מערך עצמאי.שוויון בין וקטורים
רשימות ו-NumPy מתנהגים אחרת.
a = [1, 2, 3] b = [1, 2, 3] print(a == b) # True
a = np.array([1, 2, 3]) b = np.array([1, 2, 3]) print(a == b) # [ True True True ] print(np.array_equal(a, b)) # True
סקלר לעומת 1-וקטור
בספר לעיתים מזהים 1-וקטור עם סקלר; בקוד אלה עצמים שונים.
סקלר
a = 5
type(a)
# intרשימה באורך 1
x = [5]
len(x)
# 1מערך NumPy באורך 1
x = np.array([5])
x.shape
# (1,)x == 5 מתבצע איבר־איבר ומחזיר מערך בוליאני.וקטור של בלוקים
בונים וקטור ארוך מכמה וקטורים.
x = np.array([1, 2]) y = np.array([10, 20, 30]) t = np.concatenate([x, y]) print(t) # [ 1 2 10 20 30]
t1 = (x, y) # tuple of arrays t2 = [x, y] # list of arrays # אלה אינם וקטור שטוח אחד
תת־וקטור ו-slicing
האינדקס הימני אינו נכלל.
10
20
30
40
50
60
x = np.array([10, 20, 30, 40, 50, 60]) sub = x[1:5] print(sub) # [20 30 40 50]
x[1:4] = 0 print(x) # [10 0 0 0 50 60]
קיצורי דרך ודוגמאות נוספות
התחלה, סוף, דילוג והיפוך.
x[:3]שלושת האיברים הראשוניםx[3:]מן האינדקס 3 ועד הסוףx[::2]כל איבר שניx[::-1]היפוך הסדרx = np.array([1, 2, 3, 4, 5, 6]) print(x[:3]) # [1 2 3] print(x[3:]) # [4 5 6] print(x[::2]) # [1 3 5] print(x[::-1]) # [6 5 4 3 2 1]
וקטור הפרשים — lag 1
שימושי בעיבוד אותות ובסדרות עתיות.
הווקטור החדש מתאר את השינוי בין כל שתי תצפיות עוקבות.
x = np.array([10, 13, 12, 20, 25]) differences = x[1:] - x[:-1] print(differences) # [ 3 -1 8 5]
רשימות ווקטורים מיוחדים
המשך ישיר של שקופיות 96–100.
vectors = [x, y, z]np.zeros(5)np.ones(5)np.eye(5)[2]rng = np.random.default_rng(42)
x = rng.normal(size=100)
print(x[:5])גרפים
וקטור ערכים מוצג כקו לאורך האינדקסים.
import matplotlib.pyplot as plt x = np.array([1, 3, 2, 6, 5, 8, 5, 7, 9]) plt.plot(x, marker="o") plt.xlabel("Index") plt.ylabel("Value") plt.title("Vector values") plt.grid() plt.show()
תרגול קצר
אינדקסים, העתקה ו-slicing.
משימה 1
x = np.array([5, 10, 15, 20, 25, 30])
מה מחזירים x[-1], x[1:5] ו-x[::2]?
30 [10 15 20 25] [ 5 15 25]
משימה 2
x = np.array([1, 2, 3]) y = x y[1] = 99
מהו כעת x, וכיצד למנוע זאת?
x == [1, 99, 3] y = x.copy()
Take-home message
המעבר מן הסימון המתמטי לקוד.
-1..copy().== היא איבר־איבר.x[1:] - x[:-1].מפת כיסוי
שקופיות 76–101 נשמרו והורחבו.