Menu
Coddy logo textTech

אינדוקס לפי ממדים

שיעור 13 מתוך 18 בקורס יסודות NumPy של Coddy.

NumPy תומכת בכלי עוצמתי במיוחד — אינדוקס ממדים.

כדי לאנדקס ממד, משתמשים בנקודתיים :. נקודתיים כוללות את כל האיברים באינדקס המסוים שבו הן מופיעות. לדוגמה, נניח שיש לנו מערך בעל הצורה ary.shape # --> (2, 1, 3, 1); הצבת נקודתיים : ב-ary[:, 0, 0, 0] תבחר את שני האיברים השמאליים ביותר של הצורה, ועבור כל אחד מהם תחלץ את האיבר באינדקס אפס בשאר הממדים.

הערה: מיקום הנקודתיים בתוך brackets [] מציין את הממד שאנו מאנדקסים, כלומר

  • ary[:, 0, 0, 0] אינדקס של הממד הרביעי
  • ary[0, :, 0, 0] אינדקס של הממד השלישי
  • ary[0, 0, :, 0] אינדקס של הממד השני
  • ary[0, 0, 0, :] אינדקס של הממד הראשון
  • ary[:, :, 0, 0] אינדקס של הממד הרביעי ושל הממד השלישי
  • וכו׳

דוגמה 1

ary = np.array([
	[1, 2], 
	[3, 4]
])
ary[:, 0] # --> [1, 3]
ary[0, :] # --> [1, 2]

נקודתיים בוחרות את כל האיברים באינדקס שצוין וממשיכות לאינדקס הבא

במקרה שלנו: 

  • ary[:, 0] אנחנו בוחרים את כל האיברים הראשונים, ומכל אחד מהם בוחרים את האיבר באינדקס 0
  • ary[0, :] אנחנו בוחרים את האיבר הראשון, ומתוכו בוחרים את כל האיברים.

דוגמה 2

מערך תלת־ממדי

ary = np.array([
	[[1, 2], [3, 4]],
	[[5, 6], [7, 8]]
])
ary[:, 0, :] # --> [[1, 2], [5, 6]]
ary[:, :, 0] # --> [[1, 3], [5, 7]]
  • ary[:, 0, :] אנחנו בוחרים את כל האיברים, אחר כך בוחרים את האיבר הראשון, ולבסוף בוחרים את כל מה שיש בו
  • ary[:, :, 0] אנחנו בוחרים את כל האיברים, אחר כך את כל האיברים האלה, ולבסוף את האיבר הראשון בכל אחד מהם.
  • האם תוכלו לנחש מה יהיה הפלט של ary[0, :, :]

דוגמה 3

קבלת האינדקס הראשון והאחרון מכל שורה

x = np.array([
	[ 0,  1,  2,  3,  4,  5],
	[ 6,  7,  8,  9, 10, 11],
	[12, 13, 14, 15, 16, 17],
	[18, 19, 20, 21, 22, 23],
])
x[:, np.array([0, -1])]
>>> [0, 5, 6, 11, 12, 17, 18, 23]

דוגמה 4

מערך בעל הצורה (2, 1, 3, 1), בדיוק כמו בדוגמה הפותחת

ary = np.array([
    [
        [
            [1],[2],[3]
        ]
    ],
    [
        [
            [4],[5],[6]
        ]
    ]
])
ary[:, 0, 0, 0] # --> [1, 4]
ary[0, :, 0, 0] # --> [1]
ary[0, 0, :, 0] # --> [1, 2, 3]
ary[0, 0, 0, :] # --> [1]

הערה: אפשר להשתמש גם בתחביר החיתוך: start:stop:step שלמדנו בשיעור Slicing

  • ary[:, 0:5, 2:3, :]
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

challenge icon

אתגר

קל

בהינתן מערך תלת־ממדי ary, אחזר את המספרים השני, השלישי והרביעי מכל מערך חד־ממדי

נסו בעצמכם

import numpy as np
'''
ary looks like:
array([[[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
        [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]],

       [[20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
        [30, 31, 32, 33, 34, 35, 36, 37, 38, 39]],

       [[40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
        [50, 51, 52, 53, 54, 55, 56, 57, 58, 59]],

       [[60, 61, 62, 63, 64, 65, 66, 67, 68, 69],
        [70, 71, 72, 73, 74, 75, 76, 77, 78, 79]],

       [[80, 81, 82, 83, 84, 85, 86, 87, 88, 89],
        [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]]])
'''
ary = np.arange(0, 100).reshape(5, 2, 10) # don't change ary
res = ary[] # <-- Complete indices
print(str(res).replace("\n", "")) # don't change this line

כל השיעורים ביחידה יסודות NumPy

תרגלו בעצמכם: קומפיילר Python אונליין