טיפוסי NumPy
שיעור 7 מתוך 18 בקורס יסודות NumPy של Coddy.
התוכנית חייבת להקצות מספיק מקום כדי לאפשר למערך בגודל קבוע לאחסן את הנתונים שלו פנימית. איך מחשב יכול לקבוע כמה מקום להקצות?
כאן נכנס לתמונה ה-dtype. לכל dtype יש ערך מרבי וערך מזערי, המאפשרים למכונה לדעת כמה מקום להקצות לכל תא במערך. יש סוגים רבים של Numpy.
סוגי Int הם מספרים שלמים בני n סיביות:
| סוג | מינימום | מקסימום | חזקה | סיביות |
| np.int8 | -128 | 127 | 2**8 | 8 |
| np.int16 | -32768 | 32767 | 2**16 | 16 |
| np.int32 | -2147483648 | 2147483647 | 2**32 | 32 |
| np.int64 | -9223372036854775808 | 9223372036854775807 | 2**64 | 64 |
סוגי 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 המתאים לצרכים שלנו.
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
אתגר
קלצרו פונקציה בשם 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 אונליין