שאלות ותשובות

1. הערך המקסימלי של uint8

הערך הגדול ביותר שניתן לאחסן במשתנה מסוג uint8 הוא 255.

2. המרת מספר עשרוני למחרוזת

כאשר מריצים את הפקודה str(int(12.3)), התוצאה היא המחרוזת '12'. הפונקציה int מעגלת כלפי מטה ל-12, ואז str ממירה אותו למחרוזת.

3. מבנה נתונים לזוגות מפתח-ערך

מילון (dict) הוא מבנה הנתונים המתאים לאחסון זוגות של מפתח וערך.

4. נוסחת הדיוק בלמידת מכונה

הדיוק (Accuracy) מחושב לפי היחס:

\[\text{Acc} = \frac{TP + TN}{TP + TN + FP + FN}\]

5. גישה לאיבר במטריצה

נתון הקוד הבא:

row1 = [1, 2, 3]
row2 = [400, 500, 600]
row3 = [700, 800, 900]
mat = [row1, row2, row3]
print(mat[0][2])

הפלט יהיה 3, כי אנחנו ניגשים לשורה הראשונה (אינדקס 0) ולאיבר השלישי בה (אינדקס 2).

6. מטרת קבוצת הביקורת

קבוצת הביקורת (test set) משמשת לקבלת הערכה מספרית לאיכות המודל. היא מאפשרת לבדוק את ביצועי המודל על נתונים שהוא לא ראה בזמן האימון.

7. ממוצע על ציר במערך תלת-ממדי

עבור מערך תמונה בגודל (400, 300, 3), הפעלת np.mean(image, axis=0) תחזיר מערך בגודל (300, 3). הממוצע מחושב על הציר הראשון (הגובה), כך שנשארים הרוחב וערוצי הצבע.

הערה: טעיתי כאן במבחן.

8. השלמת קוד - פונקציה למצב צבירה

הקוד מהתרגול:

def state(Tm, Tv, T):
    if T <= Tm:
        return "solid"
    if Tm <= T < Tv:
        return "liquid"
    else:
        return "gas"

לדעתי סימנתי גרסה עם תנאי של לולאה מכוננת (nested):

def state(T, Tm=0, Tv=100):
    if T > Tm:
        if T < Tv:
            return "liquid"
        else:
            return "gas"
    else:
        return "solid"

9. השלמת קוד - סינון אפסים מרשימה

לא בטוח שאני זוכר את הקוד במדויק:

import numpy as np

xs_with_zero = np.linspace(0, 10, 100)
xs = []

for x in range(len(xs_with_zero)):
    if xs_with_zero[x] != 0:
        xs.append(xs_with_zero[x])

שאלות על עיבוד תמונת מוח

הקוד הבא הוצג במבחן:

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt

brain_path = "brain.png"
brain = Image.open(brain_path)
brain = np.array(brain)

plt.imshow(brain)

print("Image shape:", brain.shape)
print("Image dtype:", brain.dtype)  # uint8

left_brain = brain[:, :512//2]
right_brain = brain[:, 512//2:]

fig, axs = plt.subplots(1, 2, figsize=(8, 4))
axs[0].imshow(left_brain)
axs[1].imshow(right_brain)

import plotly.express as px
px.imshow(right_brain, color_continuous_scale='gray')

plt.imshow(right_brain > 110, cmap='gray')

10. תוצאת השוואת סף בתמונה

הפקודה plt.imshow(right_brain > 110, cmap='gray') מציגה תמונה בינארית (binary). כל פיקסל שערכו גדול מ-110 יהיה לבן, והשאר יהיו שחורים.

תשובה מעודכנת לאחר פרסום המבחן.

11. חיתוך הצד השמאלי של התמונה

כדי לקבל את הצד השמאלי של המוח, משתמשים בחיתוך brain[:, :512//2]. זה לוקח את כל השורות ואת המחצית השמאלית של העמודות.


שאלות על קריאה וכתיבה לקובץ

הקוד הבא הוצג במבחן:

def write_file(file_path, content):
    fl = open(file_path, 'w')
    fl.write(content)
    fl.close()

def read_file(file_path):
    fl = open(file_path)
    lines = fl.readlines()
    fl.close()

    long_string = ""
    for line in lines:
        long_string += line.strip()
    return long_string

write_file("test.txt", "Hello\tFrineds\nHow\tAre\tYou?")
print(read_file("test.txt"))

12. תוכן הקובץ שנוצר

תוכן הקובץ test.txt יהיה:

Hello	Frineds
How	Are	You?

13. תוצאת פונקציית הקריאה

הפלט של read_file("test.txt") יהיה:

Hello	FrinedsHow	Are	You?

הפונקציה strip מסירה רק רווחים ותווי שורה חדשה מקצוות השורה, אך לא מסירה טאבים מאמצע המחרוזת. לכן התוצאה תהיה Hello\tFriendsHow\tAre\tYou?.

14. סוג המשתנה axs

כאשר מריצים fig, axs = plt.subplots(1, 2, figsize=(8, 4)), המשתנה axs הוא מערך של אובייקטים מסוג Axes. כל אובייקט מכיל פונקציות לציור גרפים כמו imshow ו-plot.

דור פסקל