מדריך SciPy: מהו Python SciPy וכיצד להשתמש בו?



SciPy היא ספריית פיתון המשמשת לפתרון בעיות מדעיות ומתמטיות. NumPy לעומת SciPy. בסיסי, מיוחד, אינטגרציה, אופטימיזציה וכו 'עם דוגמאות.

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

לפני שתמשיך, בדוק את כל הנושאים הנדונים במאמר זה:





אז בואו נתחיל. :)

מה זה SciPy?

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



NumPy לעומת SciPy

גם NumPy וגם SciPy משמש לניתוחים מתמטיים ומספריים משומשים. NumPy מכיל נתוני מערך ופעולות בסיסיות כגון מיון, אינדקס וכו 'ואילו SciPy מורכב מכל הקוד המספרי. למרות NumPy מספק מספר שיכולים לעזור לפתור אלגברה לינארית, טרנספורמציות פורייה וכו ', SciPy היא הספרייה שמכילה למעשה גרסאות מלאות של פונקציות אלה יחד עם רבות אחרות. עם זאת, אם אתה מבצע ניתוח מדעי באמצעות Python, תצטרך להתקין גם NumPy וגם SciPy מכיוון ש- SciPy מתבסס על NumPy.

חבילות משנה ב- SciPy:

ל- SciPy מספר חבילות משנה לחישובים מדעיים שונים המוצגות בטבלה הבאה:

שֵׁםתיאור
אֶשׁכּוֹלאלגוריתמי אשכולות
קבועיםקבועים פיזיים ומתמטיים
fftpackשגרות טרנספורמציה מהירה של פורייה
לשלבאינטגרציה ופותרי משוואה דיפרנציאלית רגילה
אינטרפולציהאינטרפולציה והחלקת זרעים
אניקלט ופלט
לינאלגאלגברה ליניארית
אני עףעיבוד תמונה ממדי N
אדוןרגרסיה מרחוק אורתוגונלית
לייעלשגרות אופטימיזציה ומציאת שורשים
אוֹתעיבוד אות
דלילמטריצות דלילות ושגרות נלוות
מֶרחָבִימבני נתונים מרחביים ואלגוריתמים
מיוחדפונקציות מיוחדות
סטטיסטיקההתפלגויות ופונקציות סטטיסטיות

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



יש לייבא חבילות אלה אך ורק לפני השימוש בהן. לדוגמה:

מאשכול הייבוא ​​הקלפי

לפני שנסתכל על כל אחת מהפונקציות הללו בפירוט, נסתכל תחילה על הפונקציות הנפוצות הן ב- NumPy והן ב- SciPy.

פונקציות בסיסיות:

אינטראקציה עם NumPy:

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

עֶזרָה():

כדי לקבל מידע על כל פונקציה, אתה יכול להשתמש ב- עֶזרָה() פוּנקצִיָה. ישנן שתי דרכים בהן ניתן להשתמש בפונקציה זו:

  • ללא כל פרמטרים
  • באמצעות פרמטרים

הנה דוגמה המציגה את שתי השיטות לעיל:

מ- scipy יבוא עזרה באשכול (אשכול) # עם פרמטר עזרה () # ללא פרמטר

כאשר אתה מבצע את הקוד לעיל, העזרה הראשונה () מחזירה את המידע על ה- אֶשׁכּוֹל תת מודול. העזרה השנייה () מבקשת מהמשתמש להזין את השם של כל מודול, מילת מפתח וכו 'שעבורם המשתמש רוצה לחפש מידע. כדי לעצור את ביצוע פונקציה זו, פשוט הקלד 'צא' ולחץ על Enter.

מידע ():

פונקציה זו מחזירה מידע על הרצוי , מודולים וכו '.

scipy.info (אשכול)

מָקוֹר():

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

scipy.source (אשכול)

פונקציות מיוחדות:

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

פונקציות אקספוננציאליות וטריגונומטריות:

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

שקול את הדוגמה הבאה:

מיין מערך c ++

דוגמא:

מ- scipy יבוא מיוחד a = special.exp10 (3) הדפס (a) b = special.exp2 (3) הדפס (b) c = special.sindg (90) הדפס (c) d = special.cosdg (45) הדפס ( ד)

תְפוּקָה:

1000.0
8.0
1.0
0.7071067811865475

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

פונקציות שילוב:

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

שילוב כללי:

SiPy מספק פונקציה בשם מְרוּבָּע לחישוב האינטגרל של פונקציה שיש בה משתנה אחד. הגבולות יכולים להיות ± ואינסוף(± inf) לציון גבולות אינסופיים. התחביר של הפונקציה quad () הוא כדלקמן:

תחביר:

quad (func, a, b, args = (), full_output = 0, epsabs = 1.49e-08, epsrel = 1.49e-08, limit = 50, points = None, משקל = None, wvar = None, wopts = None , maxp1 = 50, limlst = 50)

כאן, הפונקציה תשולב בין הגבולות a ו- b (יכולה להיות גם אינסופית).

דוגמא:

מיבוא scipy מיוחד מיבוא scipy שילוב a = lambda x: special.exp10 (x) b = scipy.integrate.quad (a, 0, 1) הדפס (b)

בדוגמה לעיל, הפונקציה 'a' מוערכת בין הגבולות 0, 1. כאשר קוד זה מבוצע, תראה את הפלט הבא.

תְפוּקָה:

(3.9086503371292665, 4.3394735994897923e-14)

פונקציה אינטגרלית כפולה:

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

דוגמא:

מיבוא קלוש לשלב a = lambda y, x: x * y ** 2 b = lambda x: 1 c = lambda x: -1 integrate.dblquad (a, 0, 2, b, c)

תְפוּקָה:

-1.3333333333333335, 1.4802973661668755e-14)

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

פונקציות אופטימיזציה:

ה- scipy.optimize מספק מספר אלגוריתמי אופטימיזציה נפוצים שניתן לראות באמצעות פונקציית העזרה.

זה בעצם מורכב מהדברים הבאים:

  • מזעור לא מוגבל ומוגבל של פונקציות סקלריות מרובות משתנים כלומר לְצַמְצֵם (למשל BFGS, Gradient Conjugate Newton, Nelder_mead simplex וכו ')
  • שגרות אופטימיזציה גלובליות (למשל, התפתחות דיפרנציאלית, כפול חישול וכו ')
  • מזעור ריבועים קטן ביותר והתאמת עקומות (למשל לפחות_ריבועים, עקומת_כושר וכו ')
  • סקלרים חד-משתנים פונקציות מינימליזרים ומוצאי שורשים (למשל. Minimize_scalar ו- root_scalar)
  • פתרונות מערכת משוואות רב-משתנים המשתמשים באלגוריתמים כגון פאוול היברידי, לבנברג-מרקוארדט.

פונקצית רוזנברוק:

פונקצית רוזנברוק ( רוזן ) היא בעיית בדיקה המשמשת לאלגוריתמי אופטימיזציה מבוססי שיפוע. זה מוגדר באופן הבא ב- SciPy:

rosen-Scipy tutorial-edurekaדוגמא:

ייבא קהה כ- np מ- scipy. אופטימיזציה של יבוא rosen a = 1.2 * np. orange (5) rosen (a)

תְפוּקָה: 7371.0399999999945

נלדר-מיד:

הנלדרשיטת Mead היא שיטה מספרית המשמשת לעתים קרובות למציאת מינימום / מקסימום של פונקציה במרחב רב מימדי. בדוגמה הבאה, משתמשים בשיטת המזעור יחד עם האלגוריתם Nelder-Mead.

דוגמא:

מיבוא scipy לייעל a = [2.4, 1.7, 3.1, 2.9, 0.2] b = optimize.minimize (optimize.rosen, a, method = 'Nelder-Mead') b.x

תְפוּקָה: מערך ([0.96570182, 0.93255069, 0.86939478, 0.75497872, 0.56793357])

פונקציות אינטרפולציה:

בתחום הניתוח המספרי, אינטרפולציה מתייחסת לבניית נקודות נתונים חדשות בתוך סט של נקודות נתונים ידועות. ספריית SciPy מורכבת מחבילת משנה בשם scipy.interpolate המורכבת מ-פונקציות ושיעורי שדרה, שיעורי אינטרפולציה חד-ממדיים ורב-ממדיים (חד-משתנים ורב-משתנים) וכו '.

אינטרפולציה חד-משתנית:

אינטרפולציה חד-משתנית היא בעצם אזור של התאמת עקומות אשרמוצא את העקומה המספקת התאמה מדויקת לסדרה של נקודות נתונים דו ממדיות. SciPy מספק interp1d פונקציה שניתן להשתמש בה כדי לייצר אינטרפולציה חד-משתנית.

דוגמא:

ייבא matplotlib.pyplot כ- plt מ scipy ייבוא ​​אינטרפולציה x = np.arange (5, 20) y = np.exp (x / 3.0) f = interpolate.interp1d (x, y) x1 = np.arange (6, 12) y1 = f (x1) # השתמש בפונקציית אינטרפולציה שהוחזרה על ידי pltplot 'interp1d` (x, y,' o ', x1, y1,' - ') plt.show ()

תְפוּקָה:

אינטרפולציה רב-משתנית:

אינטרפולציה רב-משתנית(מֶרחָבִישִׁרבּוּב) הוא סוגשִׁרבּוּבעל פונקציות המורכבות ביותר ממשתנים אחד. הדוגמה הבאה מדגימה דוגמה ל- interp2d פוּנקצִיָה.
אינטרפולציה על גבי רשת דו-ממדית באמצעות פונקציית interp2d (x, y, z) בעצם תשתמש במערכי x, y, z בכדי לקרוב לפונקציה כלשהי f: “z = f (x, y)“ ומחזירה פונקציה ששיטת הקריאה בה משתמשת אינטרפולציה של שדרה כדי למצוא את הערך של נקודות חדשות.
דוגמא:

מיבוא scipy interpolate ייבוא ​​matplotlib.pyplot כ- plt x = np.arange (0,10) y = np.arange (10,25) x1, y1 = np. meshgrid (x, y) z = np.tan (xx + yy) f = interpolate.interp2d (x, y, z, kind = 'cubic') x2 = np. orange (2,8) y2 = np. range (15,20) z2 = f (x חדש, ynew) plt. עלילה (x, z [0,:], 'ro-', x2, z2 [0,:], '-') plt.show ()

תְפוּקָה:

פונקציות טרנספורמציה של פורייה:

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

דוגמא:

מ- scipy.fftpack ייבוא ​​fft, ifft x = np.array ([0,1,2,3]) y = fft (x) הדפס (y)

תְפוּקָה: [6. + 0.j -2. + 2.j -2. + 0.j -2.-2.j]

באופן דומה, אתה יכול למצוא את ההפך מזה באמצעות ifft לתפקד באופן הבא:

דוגמא:

rom scipy.fftpack ייבוא ​​fft, ifft x = np.array ([0,1,2,3]) y = ifft (x) הדפס (y)

תְפוּקָה: [1.5 + 0.j -0.5-0.5j -0.5 + 0.j -0.5 + 0.5j]

פונקציות עיבוד אותות:

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

סִנוּן:

על ידי סינון אות אתה בעצם מסיר ממנו רכיבים לא רצויים. כדי לבצע סינון שהוזמן, תוכלו להשתמש ב- סדר_סינון פוּנקצִיָה. פונקציה זו בעצם מבצעת סינון מסודר על מערך. התחביר של פונקציה זו הוא כדלקמן:

תחביר:
order_filter (a, domain, rank)

a = מערך קלט ממדי N

תחום = מערך מסיכות בעל מספר המידות זהה לזה של 'a'

דרגה = מספר לא שלילי שבוחר אלמנטים מהרשימה לאחר מיון (0 הוא הקטן ביותר ואחריו 1 ...)

דוגמא:

מאת אות הייבוא ​​הקלפי x = np.arange (35). reshape (7, 5) domain = np.identity (3) הדפס (x, end = 'nn') הדפס (signal.order_filter (x, domain, 1))

תְפוּקָה:

[[0 1 2 3 4]
[5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]
[20 21 22 23 24]
[25 26 27 28 29]
[30 31 32 33 34]]

[[0. 1. 2. 3. 0.]
[5. 6. 7. 8. 3.]
[10. 11. 12. 13. 8.]
[חֲמֵשׁ עֶשׂרֵה. 16. 17. 18. 13.]
[עשרים. 21. 22. 23. 18.]
[25. 26. 27. 28. 23.]
[0. 25. 26. 27. 28.]]

צורות גל:

חבילת המשנה scipy.signal מורכבת גם מפונקציות שונות בהן ניתן להשתמש כדי ליצור צורות גל. פונקציה אחת כזו היא צִיוּץ . פונקציה זו היא fמחולל קוסינוס הנסחף ומתחביר הוא כדלקמן:

תחביר:
ציוץ (t, f0, t1, f1, method = 'linear', phi = 0, vertex_zero = True)

איפה,

דוגמא:

מ- scipy.signal ייבוא ​​ציוץ, ספקטרוגרמה ייבוא ​​matplotlib.pyplot כ- plt t = np.linspace (6, 10, 500) w = ציוץ (t, f0 = 4, f1 = 2, t1 = 5, שיטה = 'לינארית') plt.plot (t, w) plt.title ('ציוץ ליניארי') plt.xlabel ('זמן בשניות)') plt.show ()

תְפוּקָה:

אלגברה ליניארית:

אלגברה ליניארית עוסקת במשוואות ליניאריות וייצוגיהן באמצעות רווחים וקטוריים ומטריצות. SciPy בנוי עלספריות ATLAS LAPACK ו- BLASמהיר ביותר בפתרון בעיות הקשורות לאלגברה לינארית. בנוסף לכל הפונקציות מ- numpy.linalg, scipy.linalg מספק גם מספר פונקציות מתקדמות אחרות. כמו כן, אם לא משתמשים ב- numpy.linalg יחד עםתמיכה ב- ATLAS LAPACK ו- BLAS, scipy.linalg מהיר יותר מ- numpy.linalg.

מציאת ההפך של מטריקס:

מתמטית, ההפוך של מטריצה ​​A.היא המטריצהבכך שAB = אניאיפהאניהיא מטריצת הזהות המורכבת מאלה במורד האלכסון הראשי המסומן כ-B = A-אחד. ב- SciPy ניתן להשיג את ההפך באמצעות ה- linalg.inv שיטה.

דוגמא:

יבוא קהה כ- np מיבוא קלוש linalg A = np.array ([[1,2], [4,3]]) B = linalg.inv (A) הדפס (B)

תְפוּקָה:

[[-0.6 0.4]
[0.8 -0.2]]

מציאת הקובעים:

הערך הנגזר אריתמטי ממקדמי המטריצה ​​ידוע כקובע מטריצה ​​מרובעת. ב- SciPy ניתן לעשות זאת באמצעות פונקציה ה בעל התחביר הבא:

תחביר:
det (a, overwrite_a = False, check_finite = True)
איפה,

a: (M, M) היא מטריצה ​​מרובעת

overwrite_a (bool, אופציונלי): אפשר להחליף נתונים ב-

check_finite (bool, אופציונלי): כדי לבדוק אם מטריצת הקלט כוללת רק מספרים סופיים

דוגמא:

ייבא קהה כמו np מיבוא linalg scipy A = np.array ([[1,2], [4,3]]) B = linalg.det (A) הדפס (B)

תְפוּקָה: -5.0

ערכי רמות דלילות:

ערכי Eigen הם קבוצה ספציפית של סקלרים המקושרים למשוואות ליניאריות. ה- ARPACK מספק המאפשר למצוא ערכים עצמיים (ווקטורים עצמיים) די מהר. הפונקציונליות המלאה של ARPACK ארוזה בתוכהשני ממשקים ברמה גבוהה שהם scipy.sparse.linalg.eigs ו- scipy.sparse.linalg.eigsh. eigs. ממשק eigs מאפשר לך למצוא את הערכים העצמיים של מטריצות ריבועיות אמיתיות או מורכבות, ואילו ממשק eigsh מכיל ממשקים עבור מטריצות אמיתיות-סימטריות או מורכבות-הרמיטיוניות.

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

דוגמא:

מ- scipy.linalg ייבוא ​​שמונה ייבוא ​​מטומטם כ np A = np.array ([[1, 2, 3, 4], [4, 3, 2, 1], [1, 4, 6, 3], [2, 3, 2, 5]]) a, b = שמונה (A) הדפסה ('ערכים עצמיים נבחרים:', א) הדפסה ('מערך נדיר מורכב:', ב)

תְפוּקָה:

ערכים עצמיים נבחרים: [-2.53382695 1.66735639 3.69488657 12.17158399]
מערך נדיר מורכב: [[0.69205614 0.5829305 0.25682823 -0.33954321]
[-0.68277875 0.46838936 0.03700454 -0.5595134]
[0.23275694 -0.29164622 -0.72710245 -0.57627139]
[0.02637572 -0.59644441 0.63560361 -0.48945525]]

מבני נתונים מרחביים ואלגוריתמים:

נתונים מרחביים מורכבים בעצם מאובייקטים המורכבים מקווים, נקודות, משטחים וכו '. החבילה scipy.spatial של SciPy יכולה לחשבתרשימי וורונוי, משולשים וכו 'באמצעות ספריית Qhull. הוא מורכב גם מיישומי KDTree לשאילתות נקודת השכן הקרובות ביותר.

משולשים בדלאונאי:

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

דוגמא:

ייבא matplotlib.pyplot כ- plt מ scipy.spatial יבוא נקודות דלאוני = np.array ([[0, 1], [1, 1], [1, 0], [0, 0]]) a = דלאוני (נקודות) # הדפסת אובייקט Delaunay (א) הדפס (א.פשטות) plt.triplot (נקודות [:, 0], נקודות [:, 1], a.simplices) plt.plot (נקודות [:, 1], נקודות [:, 0], 'o') plt.show ()

תְפוּקָה:

פונקציות עיבוד תמונה רב ממדיות:

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

פיתול ומתאם:

SciPy מספק מספר פונקציות המאפשרות מתאם והתמוטטות של תמונות.

  • הפונקציה קורלציה 1d ניתן לחשב מתאם חד ממדי לאורך ציר נתון
  • הפונקציה לְתַאֵם מאפשר מתאם רב מימדי של כל מערך נתון עם הגרעין שצוין
  • הפונקציה להתכנס 1d יכול לשמש לחישוב קונבולציה חד ממדית לאורך ציר נתון
  • הפונקציה להתכנס מאפשר התכנסות רב מימדית של כל מערך נתון עם הגרעין שצוין

דוגמא:

ייבא מטומטם כ- np מ- scipy.ndimage יבוא correlate1d correlate1d ([3,5,1,7,2,6,9,4], משקולות = [1,2])

תְפוּקָה: מערך ([9, 13, 7, 15, 11, 14, 24, 17])

קובץ IO:

חבילת scipy.io מספקת מספר פונקציות המסייעות לך לנהל קבצים בפורמטים שונים כגון קבצי MATLAB, קבצי IDL, קבצי Matrix Market וכו '.

כדי להשתמש בחבילה זו, יהיה עליך לייבא אותה באופן הבא:

ייבא scipy.io כ- sio

למידע מלא על אריזות המשנה, ניתן לעיין במסמך הרשמי ב קובץ IO .

זה מביא אותנו לסוף הדרכת SciPy זו. אני מקווה שהבנת הכל בבהירות. הקפידו לתרגל כמה שיותר .

יש לך שאלה עבורנו? אנא הזכיר זאת במדור התגובות בבלוג 'SciPy Tutorial' ונחזור אליך בהקדם האפשרי.

כדי לקבל ידע מעמיק על Python יחד עם היישומים השונים שלו, אתה יכול להירשם לשידור חי עם תמיכה 24/7 וגישה לכל החיים.