NumPy
מפתח | פותח במקור על ידי Travis Oliphant, כיום מפותח על ידי קהילת המתכנתים. |
---|---|
מחזור חיים |
בתור Numeric - בשנת 1995. בתור Numpy - בשנת 2006. – הווה |
גרסה אחרונה | 1.21.1 (18 ביולי 2021) |
מערכת הפעלה | תוכנה חוצה פלטפורמות |
נכתבה בשפות | Python, C |
סוג רישיון | BSD |
קטגוריה | אנליזה נומרית |
https://numpy.org/ |
NumPy (בעברית: נָאמְפַּיְ) היא ספריית קוד בשפת התכנות פייתון, אשר מספקת תמיכה במערכים גדולים רב-ממדיים ובמטריצות, וכן מספקת מבחר גדול של פעולות מתמטיות שניתן לשלב איתם. Numeric, תוכנת האב של NumPy נוצרה בשנת 1995 על ידי מפתח התוכנה ג'ים הוגונין (Jim Hugunin) יחד עם עוד כמה תורמים, ו-NumPy עצמה פותחה בשנת 2005 על ידי טרוויס אוליפנט (Travis Oiphant). היא התבססה על Numeric וכן שילבה אלמנטים מהתוכנה המתחרה Numarray, בנוסף לשינויים רבים שנעשו. NumPy היא תוכנת קוד פתוח, בעלת משתתפים רבים בפיתוח. NumPy נחשבת לספריה יעילה ביותר, שכן היא תוכננה לחיסכון בצריכת זיכרון, ואף ממומשת חלקית ב-C, שידועה כשפת תכנות יעילה ומהירה. בשל יכולות הביצוע הגבוהות שלה, על בסיסה נבנו ספריית SciPy של פונקציות במדעים מדויקים והנדסה וספריית Pandas לניתוח ועיבוד נתונים, ונעשה בה שימוש בספריות רבות אחרות.
היסטוריה
בראשית ימיה של שפת Python, המפתחים היו צריכים לבצע חישובים מספריים, במיוחד כאשר שפה זו הפכה לשימושית על ידי הקהילה המדעית.
הניסיון הראשון היה Numeric, שפותח על ידי ג'ים הוגונין ב-1995, ואחריו הגיעה חבילה חלופית בשם Numarray. שתי החבילות היו מיוחדות לחישוב מערכים, ולכל אחת מהן היו חוזקות בהתאם למקרה שבו נעשה בהן שימוש. לפיכך, נעשה בהם שימוש שונה בהתאם לנסיבות. אי בהירות זו הובילה אז לרעיון של איחוד שתי החבילות. טרוויס אוליפנט החל לפתח את ספריית NumPy למטרה זו. השחרור הראשון שלו (גרסה 1.0) הייתה ב-2006.
מאותו רגע, NumPy הוכיחה את עצמה כספריית ההרחבה הטובה של Python לחישוב מדעי, והיא כיום החבילה הנפוצה ביותר לחישוב מערכים רב-ממדיים ומערכים גדולים. בנוסף, החבילה מגיעה עם מגוון פונקציות המאפשרות לבצע פעולות על מערכים בצורה יעילה ביותר ולבצע חישובים מתמטיים ברמה גבוהה.
נכון לעכשיו, NumPy הוא קוד פתוח ומורשה תחת BSD. ישנם תורמים רבים שהרחיבו את הפוטנציאל של ספרייה זו.
מאפיינים
חבילה זו מספקת כמה תכונות שהתווספו לפייתון הסטנדרטי:
- Ndarray: מערך רב-ממדי מהיר ויעיל הרבה יותר מאלה שמסופקים על ידי החבילה הבסיסית של Python.
- חישוב אלמנטרי: קבוצה של פונקציות לביצוע חישוב מסוג זה עם מערכים ופעולות מתמטיות בין מערכים.
- אלגברת וקטורים: חיתוך ודגימת מערכים באמצעות טווחי אינדקסים (בדומה ל-MATLAB), כפל בין מערכים המייצגים וקטורים ומטריצות, כולל כפל מטריצות, כפל איבר-איבר ומכפלה סקלרית.
- מתמטיקה אלמנטרית: ערך מוחלט, אקספוננט, פונקציות טריגונומטריות, הוצאת שורש ועוד.
- פונקציות מתמטיות מתקדמות: טרנספורם פורייה מסוג FFT, נורמה של וקטורים ומטריצות, דטרמיננטה, הפיכת מטריצות והפכי מור-פנרוז, חישוב ערכים עצמיים ועוד.
- מערכי נתונים של קריאה-כתיבה: סט כלים לקריאה וכתיבת נתונים המאוחסנים בדיסק הקשיח.
- אינטגרציה עם שפות אחרות כגון C ו-C++ ו- FORTRAN: סט של כלים לשילוב קוד שפותח עם שפות תכנות אלו.
דוגמאות קוד
התקנת החבילה
sudo apt-get install python-numpy
sudo yum install numpy scipy
ב-Windows
conda install numpy
באמצעות Visual Studio Code
pip install numpy
יצירת מערך
>>> import numpy as np
>>> x = np.array([1, 2, 3])
>>> x
array([1, 2, 3])
>>> y = np.arange(10) # like Python's list(range(10)), but returns an array
>>> y
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
פעולות בסיסיות
>>> a = np.array([1, 2, 3, 6])
>>> b = np.linspace(0, 2, 4) # create an array with four equally spaced points starting with 0 and ending with 2.
>>> c = a - b
>>> c
array([ 1. , 1.33333333, 1.66666667, 4. ])
>>> a**2
array([ 1, 4, 9, 36])
פעולות אוניברסליות
>>> a = np.linspace(-np.pi, np.pi, 100)
>>> b = np.sin(a)
>>> c = np.cos(a)
אלגברה ליניארית
>>> from numpy.random import rand
>>> from numpy.linalg import solve, inv
>>> a = np.array([[1, 2, 3], [3, 4, 6.7], [5, 9.0, 5]])
>>> a.transpose()
array([[ 1., 3., 5. ],
[ 2. , 4. , 9. ],
[ 3. , 6.7, 5. ]])
>>> inv(a)
array([[-2.27683616, 0.96045198, 0.07909605],
[ 1.04519774, -0.56497175, 0.1299435 ],
[ 0.39548023, 0.05649718, -0.11299435]])
>>> b = np.array([3, 2, 1])
>>> solve(a, b) # solve the equation ax = b
array([-4.83050847, 2.13559322, 1.18644068])
>>> c = rand(3, 3) * 20 # create a 3x3 random matrix of values within [0,1] scaled by 20
>>> c
array([[ 3.98732789, 2.47702609, 4.71167924],
[ 9.24410671, 5.5240412 , 10.6468792 ],
[ 10.38136661, 8.44968437, 15.17639591]])
>>> np.dot(a, c) # matrix multiplication
array([[ 53.61964114, 38.8741616, 71.53462537],
[ 118.4935668 , 86.14012835, 158.40440712],
[ 155.04043289, 104.3499231 , 195.26228855]])
>>> a @ c # Starting with Python 3.5 and NumPy 1.10
array([[ 53.61964114, 38.8741616, 71.53462537],
[ 118.4935668 , 86.14012835, 158.40440712],
[ 155.04043289, 104.3499231 , 195.26228855]])
שילוב עם ספרית OpenCV
>>> import numpy as np
>>> import cv2
>>> r = np.reshape(np.arange(256*256)%256,(256,256)) # 256x256 pixel array with a horizontal gradient from 0 to 255 for the red color channel
>>> g = np.zeros_like(r) # array of same size and type as r but filled with 0s for the green color channel
>>> b = r.T # transposed r will give a vertical gradient for the blue color channel
>>> cv2.imwrite('gradients.png', np.dstack([b,g,r])) # OpenCV images are interpreted as BGR, the depth-stacked array will be written to an 8bit RGB PNG-file called 'gradients.png'
True
קישורים חיצוניים
- אתר האינטרנט הרשמי של NumPy
36542729NumPy