פייתון בסביבה המדעית/נומריקה עם NumPy

מתוך ויקיספר, אוסף הספרים והמדריכים החופשי
Cheatsheet למהגר ממטלאב

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 דומה לזה של מטלאב. יוצאי הדופן העיקריים, אשר נראה בהמשך, הם:

  1. יצירת מערך: NumPy יוצר מערך מתוך רשימה על ידי פקודות כמו array, arange.
  2. גישה לאיברים במערך.

ראשית יש לייבא את המודול:

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]]

קישורים חיצוניים[עריכה]