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