Menu
Coddy logo textTech

טיפוסי NumPy

שיעור 7 מתוך 18 בקורס יסודות NumPy של Coddy.

התוכנית חייבת להקצות מספיק מקום כדי לאפשר למערך בגודל קבוע לאחסן את הנתונים שלו פנימית. איך מחשב יכול לקבוע כמה מקום להקצות?

כאן נכנס לתמונה ה-dtype. לכל dtype יש ערך מרבי וערך מזערי, המאפשרים למכונה לדעת כמה מקום להקצות לכל תא במערך.  יש סוגים רבים של Numpy.

סוגי Int הם מספרים שלמים בני n סיביות:

סוגמינימוםמקסימוםחזקהסיביות
np.int8-1281272**88
np.int16-32768327672**1616
np.int32-214748364821474836472**3232
np.int64-922337203685477580892233720368547758072**6464

סוגי Float:

סוג
np.float16
np.float32
np.float64
np.float128

אני לא יכול להציג את הערכים המזעריים והמרביים כי הם גדולים מדי.

כדי לראות בעצמכם מהם הערך המרבי והערך המזערי, תוכלו להשתמש ב-numpy.iinfo(<i>type</i>) עבור סוגי מספרים שלמים וב-numpy.finfo(<i>dtype</i>) עבור סוגי float:

np.iinfo(np.int16).min
np.iinfo(np.int16).max

למה חשוב לנו להקפיד על dtypes?

נניח שיש לנו מערך שבו כל איבר מייצג חדר של אנשים. התוכנית עוקבת אחר מספר האנשים בכל חדר.

נגדיר את המערך כסוג np.int8:

rooms = np.array([125, 3, 127], dtype=np.int8)

כאן יש לנו 3 חדרים. המספר בכל חדר הוא מסוג np.int8. 

בחדר האחרון יש 127 אנשים! 

זהו הערך המרבי של np.int8

מה יקרה אם אדם נוסף ייכנס לחדר הזה?

rooms[-1] += 1
print(rooms)

פלט:

[ 125    3 -128]

תראו את זה! המספר הפך מ-127 ל--128. זה לא המספר הצפוי, ולכן אנחנו צריכים לוודא שאנחנו משתמשים ב-dtype המתאים לצרכים שלנו.

quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

challenge icon

אתגר

קל

צרו פונקציה בשם dtype_converter שמקבלת את מספר הביטים של הטיפוס וערך.

הפונקציה מחזירה מערך numpy בממד 0 (זכרו שמערך בממד 0 הוא פשוט ערך יחיד שמועבר אל np.array) עם ה-dtype שצוין והערך מוגדל באחד

bits יכול להיות אחד מהערכים הבאים: 8, 16, 32, 64

שימו לב היטב לפלט, חלק ממקרי הבדיקה יגרמו לגלישה!

נסו בעצמכם

import numpy as np

def dtype_converter(bits, value):
    try:
        if bits == 8:
            return np.array(value+1, dtype=np.int8)
        # Write your code here
    except:
        print("Overflow:", value+1)

כל השיעורים ביחידה יסודות NumPy

תרגלו בעצמכם: קומפיילר Python אונליין