טיפ נאמפיי: החזרת אינדקסים מפונקציה
בעבודה עם נאמפיי אחד הדברים הראשונים שנתקלים בהם הוא תחביר הסלייסים כדי לגשת לאינדקסים מרובים במערך. לדוגמה אם ניקח את לוח הכפל:
import numpy as np
arr = np.arange(1, 11) * np.arange(1, 11).reshape(-1, 1)
אז אפשר לקחת רק את הסלייס של 9 הערכים בצד שמאל למעלה עם הפקודה:
In [6]: arr[0:3,0:3]
Out[6]:
array([[1, 2, 3],
[2, 4, 6],
[3, 6, 9]])
אז זה קול והכל אבל מה קורה כשאנחנו רוצים להיות יותר יצירתיים, למשל אם נרצה לבנות פונקציה שתחזיר את הסלייס המתאים לפי כל מיני פרמטרים? הכי אי אפשר לכתוב:
def get_index():
# THIS DOES NOT WORK
return 0:3,0:3
print(arr[get_index()])
וזה מביא אותנו לטיפ היומי - הפונקציה המתאימה במקרה כזה נקראת slice ואני משתמש בה באופן הבא:
In [11]: def get_index():
...: return (slice(0, 3), slice(0, 3))
In [12]: arr[get_index()]
Out[12]:
array([[1, 2, 3],
[2, 4, 6],
[3, 6, 9]])
בצורה כזאת קל לקחת לוגיקה שחוזרת על עצמה לחישוב הסלייס מהמערך, לכתוב אותה במקום אחד ולהשתמש בה בכל מקום שצריך.