برش آرایه (Array Slicing)
در این صفحه با برش آرایه در نامپای آشنا می شوی. یعنی یاد می گیری به جای یک خانه، یک تکه از آرایه را با یک دستور ساده جدا کنی؛ مثل وقتی از یک نان، چند برش پشت سرهم برمی داری.
مفهوم برش آرایه در نامپای
در پایتون و نامپای، برش یا Slicing یعنی برداشتن عناصر از یک ایندکس تا ایندکس دیگر. الگو به صورت [start:end] است. start محل شروع است. end جایی است که قبل از آن متوقف می شویم.
الگوی کامل تر این است: [start:end:step]. اینجا مقدار step می گوید چند تا چندتا جلو برویم. اگر start را ننویسی، صفر حساب می شود. اگر end را ننویسی، تا آخر آرایه می رود. اگر step را ننویسی، مقدار پیش فرض یک است.
برش ساده روی آرایه یک بعدی
در این مثال، از ایندکس 1 تا 5 برش می گیریم. یعنی عنصرهای با ایندکس 1، 2، 3 و 4 را برمی داریم. ایندکس 5 در نتیجه نیست؛ چون end همیشه خود ایندکس پایانی را شامل نمی شود.
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
print(arr[1:5])
حالا از ایندکس 4 تا آخر آرایه برش می گیریم. چون end را خالی گذاشته ایم، تا آخر لیست جلو می رود.
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
print(arr[4:])
این بار از ابتدای آرایه تا قبل از ایندکس 4 برش می گیریم. وقتی start را خالی می گذاری، یعنی از اول آرایه حساب کن.
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
print(arr[:4])
نکته: در برش آرایه در نامپای، start داخل نتیجه است اما end نیست. مثل این است که بگویی «از صندلی 2 تا قبل از صندلی 5».
برش منفی روی آرایه
ایندکس منفی یعنی شمردن از آخر آرایه. ایندکس -1 یعنی آخرین عنصر. -2 یعنی یکی قبل از آخر و همین طور عقب.
در این مثال، از سه تاییِ از آخر تا یکی مانده به آخر برش می گیریم. یعنی ایندکس های -3 و -2 را برمی داریم.
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
print(arr[-3:-1])
نکته: ایندکس منفی برای وقتی مفید است که طول آرایه را نمی دانی، اما می خواهی از انتها چند عنصر برداری.
استفاده از step در برش آرایه در نامپای
با step می توانی بگویی چندتا چندتا جلو برود. مثلا step برابر 2 یعنی یک در میان عنصرها را بردارد.
در مثال زیر، از ایندکس 1 تا 5 برش می گیریم، ولی step برابر 2 است. یعنی ایندکس های 1 و 3 انتخاب می شوند.
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
print(arr[1:5:2])
حالا روی کل آرایه step برابر 2 می گذاریم. یعنی از اول آرایه تا آخر، یک در میان عنصر برمی داریم.
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
print(arr[::2])
برش آرایه های دوبعدی
در آرایه های دوبعدی، اول سطر را مشخص می کنی، بعد برش روی ستون ها را. یعنی فرم کلی چیزی شبیه arr[row, start:end] است.
در مثال زیر، از سطر دوم، عناصر ستون های 1 تا 4 (بدون 4) را برمی داریم. سطر دوم یعنی ایندکس سطر 1، چون شمارش از صفر است.
import numpy as np
arr = np.array([[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10]])
print(arr[1, 1:4])
حالا از هر دو سطر، فقط ستونی با ایندکس 2 را می گیریم. بخش 0:2 یعنی از سطر 0 تا قبل از 2؛ یعنی سطرهای 0 و 1.
import numpy as np
arr = np.array([[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10]])
print(arr[0:2, 2])
در این مثال، از هر دو سطر، ستون های 1 تا 4 (بدون 4) را می گیریم. خروجی یک آرایه دوبعدی جدید است که فقط آن قسمت میانی جدول را نگه می دارد.
import numpy as np
arr = np.array([[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10]])
print(arr[0:2, 1:4])
نکته: برش در آرایه دوبعدی مثل این است که از جدول نمره ها، فقط چند سطر و چند ستون خاص را جدا کنی.
قدم بعد از برش آرایه در نامپای
اگر هنوز در ایندکس گذاری ضعف داری، دوباره صفحه ایندکس گذاری آرایه در نامپای را مرور کن. بعد از آن، سراغ صفحه انواع داده در نامپای برو تا جنس داده ها را هم خوب بشناسی.
همچنین برای مرور خود همین موضوع، می توانی همیشه به همین صفحه برش آرایه در نامپای برگردی و مثال ها را دوباره اجرا کنی.
اگر خواستی متن انگلیسی را هم ببینی، صفحه Array Slicing در W3Schools منبع اصلی همین مثال هاست. برای توضیحات عمیق تر، مستندات رسمی NumPy Doc همیشه مفید است.
جمع بندی سریع
- برش آرایه در نامپای با الگوی start:end یا start:end:step انجام می شود.
- ایندکس start داخل نتیجه است، اما end در نتیجه نیست.
- ایندکس منفی کمک می کند از انتهای آرایه برش بگیری.
- step مشخص می کند چند عنصر را یک بار در میان برداری.
- در آرایه های دوبعدی، برش روی سطرها و ستون ها هم زمان انجام می شود.