פייתון בסביבה המדעית/נומריקה עם 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]]

קישורים חיצוניים

עריכה