פייתון בסביבה המדעית/נומריקה עם NumPy
מתוך ויקיספר, אוסף ספרי הלימוד והמדריכים החופשי.
NumPy הינה הרחבה לפייתון עם תמיכה ייעודית במערכים רב-מימדיים גדולים, ועם ספריה גדולה של פונקציות לטיפול נוח במערכים. התחביר של NumPy דומה מאוד לזה של מטלאב, ויחד עם חבילת SciPy ו-Matplotlib מהווה חלופה מסוימת ליכולותיה הנומריות של מטלאב.
NumPy הינה שילוב של החבילות הותיקות Numeric ו-Numarray.
תוכן עניינים |
[עריכה] התקנה
[עריכה] חלונות
פרק זה לוקה בחסר. אתם מוזמנים לתרום לוויקיספר ולהשלים אותו. ראו פירוט בדף השיחה.
דרכים להתקנת Numpy על חלונות, כחלק מסביבת פיתוח הכוללת את Scipy, גרפיקה, וכלים נוספים:
1. EPD (בתשלום): http://www.enthought.com/products/getepd.php
2. פיתון-XY (קוד פתוח): http://www.pythonxy.com/foreword.php
[עריכה] לינוקס
החבילה זמינה במאגרים תחת השם python-numpy.
[עריכה] היכרות
כאמור, התחביר של NumPy דומה לזה של מטלאב. יוצאי הדופן העיקריים, אשר נראה בהמשך, הם:
- יצירת מערך: NumPy יוצר מערך מתוך רשימה על ידי פקודות כמו array, arange.
- גישה לאיברים במערך.
ראשית יש לייבא את המודול:
from numpy import *
יצירת מערך:
>>> a=array([1,2,3]) >>> a array([1, 2, 3]) >>> a=arange(3) >>> a array([0, 1, 2]) >>> print a [0 1 2]
פעולות וקטוריות:
>>> x=arange(-10,10,0.01) >>> x array([-10. , -9.99, -9.98, ..., 9.97, 9.98, 9.99]) >>> x.shape (2000,) >>> y=sin(x) >>> y array([ 0.54402111, 0.53560333, 0.527132 , ..., -0.51860795, -0.527132 , -0.53560333]) >>> print y [ 0.54402111 0.53560333 0.527132 ..., -0.51860795 -0.527132 -0.53560333]
מטריצת יחידה:
>>> I3=ones(3) >>> print I3 [ 1. 1. 1.] >>> I3=ones((3)) >>> print I3 [ 1. 1. 1.] >>> I3=ones((3,3)) >>> print I3 [[ 1. 1. 1.] [ 1. 1. 1.] [ 1. 1. 1.]] >>> I3.shape (3, 3)
ניתן לשנות בפקודה אחת את תצורת המערך:
>>> A=arange(-10,10,1) >>> print A [-10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9] >>> A.shape (20,) >>> A.shape=2,10 >>> print A [[-10 -9 -8 -7 -6 -5 -4 -3 -2 -1] [ 0 1 2 3 4 5 6 7 8 9]] >>> A.shape=5,4 >>> print A [[-10 -9 -8 -7] [ -6 -5 -4 -3] [ -2 -1 0 1] [ 2 3 4 5] [ 6 7 8 9]] >>> A.shape=3,3 Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: total size of new array must be unchanged
חילוץ שורות ועמודות מתוך מערך:
>>> c=a+b >>> c array([[ 11., 12., 13.], [ 11., 12., 13.], [ 11., 12., 13.]]) >>> c[:,0] array([ 11., 11., 11.]) >>> c[:,1] array([ 12., 12., 12.]) >>> c[:,2] array([ 13., 13., 13.]) >>> c[0,:] array([ 11., 12., 13.])
גישה לאיברים במערך:
>>> a=arange(10) >>> a array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> a[10]=0 Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: index out of bounds >>> a[9]=0 >>> print a [0 1 2 3 4 5 6 7 8 0] >>> a[2:6]=0 >>> print a [0 1 0 0 0 0 6 7 8 0] >>> a[6:9]=0 >>> print a [0 1 0 0 0 0 0 0 0 0] >>> a[:9]=5 >>> print a [5 5 5 5 5 5 5 5 5 0]
[עריכה] מאפיינים
Numpy מטפלת במערכים רב-מימדיים באמצעות מחלקת ndarray. למחלקה זו מספר פונקציות שימושיות, אשר מופיעות בדגומה הבאה:
>>> A=array([[1,2],[3,4]]) >>> A=array([1,2,3,4]).reshape(2,2) # זהה לפקודה העליונה >>> type(A) <type 'numpy.ndarray'> >>> A.data # מידע על הזכרון <read-write buffer for 0x00D7BA28, size 16, offset 0 at 0x00B957A0> >>> A.dtype dtype('int32') >>> A.dtype.name 'int32' >>> A.itemsize # גודלו (בבתים) של כל תא במערך 4 >>> A.shape # מחזיר רשימה של מספר השורות והעמודות (2, 2) >>> A.size # כמות סה"כ האיברים במערך. 4 >>> A.ndim # מספר השורות (המימד - rank) של המערך 2
[עריכה] פעולות חשבון
[עריכה] חיבור
קיימת חוקיות בחיבור מערכים שאינם זהים:
>>> a=ones(3) >>> b=10*ones((3,3)) >>> a+b array([[ 11., 11., 11.], [ 11., 11., 11.], [ 11., 11., 11.]]) >>> a=arange(1,3) >>> a array([1, 2]) # המערך לא בגודל הדרוש >>> a=arange(1,4) >>> a array([1, 2, 3]) >>> a+b array([[ 11., 12., 13.], [ 11., 12., 13.], [ 11., 12., 13.]])
[עריכה] כפל
>>> A=array([[1,2],[3,4]]); print A [[1 2] [3 4]] >>> x=array([1,0]); print x [1 0] >>> print A*x [[1 0] [3 0]] >>> x.shape=2,1; print x [[1] [0]] >>> print A*x [[1 2] [0 0]]