סדנאת פייתון לפיזיקאים

הפקולטה לפיזיקה, הטכניון. חורף 2013

מרצה: רונן אברבנאל

http://ronenabr.github.io/python_for_physicsits/

רגע לפני שמתחילים:

  • בסדנה הזו נכתוב קוד. לכן, מומלץ שתהיו מול מחשב, ותהיה לכם התקנה כלשהי של פייתון.
  • כל החומר לסדנא נמצא ב- https://github.com/ronenabr/python_for_physicsits .
  • אתם צריכים רקע בסיסי בשפת תכנות כלשהי
  • לאו דווקא לזכור איך מתכנתים, אבל כן לזכור את הקונספטים המרכזיים (לולאות, תנאים, פונקציות, משתנים וכו')

## מקורות מידע נוספים

מה נלמד?

  • רקע כללי
  • שימוש בסיסי בפייתון
  • שימוש בטיפוסי משתנים שונים
  • זרימת תוכנית בפייתון: תנאים ולולאות
  • כתיבת פונקציות לביצוע פעולות מורכבות.
  • כלים לשימוש מדעי בפייתון
  • חישוב על מטריצות וכמויות גדולות של מידע באמצעות Numpy
  • כלים מדעיים מתקדמים ב-Scipy
  • ציור תרשימים באמצעות matplotlib
  • עיבוד נתונים באמצעות Pandas
  • כלים
  • עבודה עם מפרש (Interpeter) רגיל.
  • עבודה אינטראקטיבית עם IPython
  • סביבת עבודה משולבת לשימוש מדעי, spyder.

פייתון, בהשוואה לכלים אחרים

אז, אתם צריכים לעשות משהו שאולי עדיף לעשות על ידי מחשב: לכתוב סימולציה, לעבד תוצאות ניסוי, או לצייר פונקציה. בשביל אילו מהדברים האלו עדיף להשתמש בפייתון, ומתי כדאי להשתמש בסביבות עבודה / שפות אחרות.

מערכות אלגברה ממוחשבות ("Computer Algebra system", CAS)

כמו "מתמטיקה" או "מייפל".

מוצלחות במיוחד למניפולציות סימבוליות על ביטויים מתמטיים, ולרוב גם לא רעות בויזואלזיציה ("ציור" של פונקציות מורכבות). לרוב מסובכות ומעצבנות למדי כשפונים ל"תכנות" אמיתי.

למרות שלפייתון יש יכולות לא מועטות של CAS (ואף מערכת CAS מלאה הכתובה בפייתון בשם Sage), אנחנו לא נדבר יכולות של CAS בסדנה זו.

שפות תכנות "אמיתיות"

כמו C, C++ או פורטרן

הייתרון העיקרי שלהן הן שהן מהירות למדי (זמן ההרצה שלהן, אם התוכנה כתובה היטב, קצר בהרבה בהרבה מקרים בתוכניות שכתובות ב"סוגים" אחרים של שפות).
כמו כן, יש המון ספריות וכלים שעוזרים לעשות מדע .

הבעיה היא שזמן הפיתוח בשפות אלו ארוך בהרבה מאשר בקטגוריות האחרון, קשה יותר להמנע מבעיות חמורות בכתיבת הקוד והן קשות יותר ללמידה.

מטלב

שפה אינטראקטיבית פשוטה ללמידה ולשימוש עם המון כלים (toolbox) נוחים לשימוש למדענים ומהנדסים. ספריות מתמטיות מהירות למדי. היא נפוצה למדי ועם בסיס ידע רחב.

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

פייתון

בראש ובראשונה - שפת סקריפט לשימוש כללי. קלה לשימוש ולמידה , ועם מפענח אינטראקטיבי. בנוסף לכך, לפייתון יש המום כלים וספריות ("תוספות לשפה") שמקלות מאוד על פיתוח לצרכים מדעיים. הן ספריות כלליות לאלגברה לינארית, חישובים סטטיסטיים, עיבוד נתונים, ויזאוליזציה וכיו"ב, והן כלים ספציפיים לתחומים צרים (astropy, pyroot, pyalps לאסטרופיזיקה, חלקיקים ומצב מוצק, לדוגמה) .

חוץ מזה, פייתון היא שפה חופשית, וכך גם חלק ניכר מהספריות והכלים הנוספים הקשורים אליה. היא מכילה אינספור ספריות וכלים. בפרט, היא שפה לא רעה גם עבור פרויקטים גדולים מאוד.

למרות זאת, בתחומים שונים, לסביבות אחרות יש כלים מקיפים יותר. לפעמים, זו סיבה מספיקה.

סביבת העבודה

  • בחלונות, winpython כוללת את כל הכלים שנזדקק להם בסדנא זו. (לא להתבלבל עם PythonWin), וכוללת התקנה פורטובילית
  • הורידו עכשיו גרסא מתאימה, או העתיקו מהכונן הנייד שעובר בינכם
  • תפעול של winPython
  • בלינוקס, התקינו את החבילות שנדון בהן ממנהל החבילות של ההפצה.
  • אם אתם משתמשים ב-OS X, תאלצו להסתדר לבד.

המפרש (interpreter) של פייתון

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

  • למפרש של פייתון ניתן להזין קבצים שלמים ("תוכנית פייתון") או להקליד פקודות בודדות, בצורה אינטראקטיבית.
  • תוכנית פייתון היא קובץ טקסט המכיל פקודות למפרש.
  • לפעמים נוח יותר להקליד למפרש פקודות בודדות:
  • כדי לבדוק מה פקודה עושה בלי להריץ תוכנית שלמה.
  • אפשר להשתמש בו כמחשבון.
  • כדי "לשחק" אם נתונים ("exploration")

המפרש ה"בסיסי" של פייתון לא מאוד נוח לשימוש. בסדנא זו, נשתמש במגוון עטיפות למפרש שיקלו את השימוש בו.

In [4]:
 print "hello nice world"    
hello nice world

In [1]:
a = 3
b = 2*a
type(b)
Out[1]:
int
In [2]:
print b
6

In [3]:
a*b
Out[3]:
18
In [4]:
print a*b
18

In [5]:
b + b
Out[5]:
12
In [6]:
b*b
Out[6]:
36
In [7]:
b = 'hello'
type(b)
Out[7]:
str

כדי להריץ תוכנית שלמה באמצעות המפענח:

python code.py (linux)
pythonw code.py  (windows)

תרגילון

  1. פתחו את המפענח וכתבו תוכנית שמדפיסה "Hello, world"
  2. כתבו קובץ טקסט עם סיומת .py שמכיל קוד להדפסת "Hello, world". הריצו אותו באמצעות המפענח.