فهرست سرفصل‌های NumPy
خانه (HOME) مقدمه (Intro) شروع کار (Getting Started) ساخت آرایه ها (Creating Arrays) ایندکس گذاری آرایه (Array Indexing) برش آرایه (Array Slicing) انواع داده (Data Types) کپی در برابر View (Copy vs View) شکل آرایه (Array Shape) تغییر شکل آرایه (Array Reshape) حلقه روی آرایه (Array Iterating) ترکیب آرایه ها (Array Join) تقسیم آرایه ها (Array Split) جستجو در آرایه (Array Search) مرتب سازی آرایه (Array Sort) فیلتر کردن آرایه (Array Filter) مقدمه تصادفی سازی (Random Intro) توزیع داده (Data Distribution) جابه جایی تصادفی (Random Permutation) ماژول Seaborn (Seaborn Module) توزیع نرمال (Normal Distribution) توزیع دوجمله ای (Binomial Distribution) توزیع پواسون (Poisson Distribution) توزیع یکنواخت (Uniform Distribution) توزیع لجستیک (Logistic Distribution) توزیع چندجمله ای (Multinomial Distribution) توزیع نمایی (Exponential Distribution) توزیع کای دو (Chi Square Distribution) توزیع ریلی (Rayleigh Distribution) توزیع پارتو (Pareto Distribution) توزیع زیف (Zipf Distribution) مقدمه ufunc (ufunc Intro) ساخت تابع ufunc (ufunc Create Function) حساب ساده با ufunc (ufunc Simple Arithmetic) گرد کردن اعشار با ufunc (ufunc Rounding Decimals) لگاریتم ها با ufunc (ufunc Logs) جمع ها با ufunc (ufunc Summations) حاصل ضرب ها با ufunc (ufunc Products) تفاضل ها با ufunc (ufunc Differences) کمترین مضرب مشترک با ufunc (ufunc Finding LCM) بزرگترین مقسوم علیه مشترک با ufunc (ufunc Finding GCD) توابع مثلثاتی با ufunc (ufunc Trigonometric) توابع هذلولوی با ufunc (ufunc Hyperbolic) عملیات مجموعه ای با ufunc (ufunc Set Operations) ویرایشگر (Editor) آزمون (Quiz) تمارین (Exercises) سرفصل دوره (Syllabus) برنامه مطالعه (Study Plan) گواهینامه (Certificate)
نتیجه‌ای برای جستجو یافت نشد.
NumPy

NumPy — تقسیم آرایه ها (Array Split)

آخرین بروزرسانی: 1404/08/25

تقسیم آرایه ها (Array Split)

اینجا با تقسیم آرایه ها در نامپای کار می کنیم؛ یعنی برعکس ترکیب، یک آرایه بزرگ را به چند تکه کوچک و مرتب تبدیل می کنیم. مثل وقتی لیست بچه های کلاس را برای گروه بندی، به چند لیست کوچک تقسیم می کنی.

تقسیم آرایه ها در نامپای یعنی چه؟

در بخش ترکیب آرایه ها (Array Join) چند آرایه را یکی می کردیم. حالا در تقسیم آرایه ها در نامپای برعکس عمل می کنیم؛ یک آرایه را به چند آرایه کوچک می شکنیم.

تابع array_split() این کار را انجام می دهد. به آن خود آرایه و تعداد قسمت ها را می دهیم و در خروجی، لیستی از آرایه های جدا شده تحویل می گیریم.

تقسیم ساده آرایه 1 بعدی با array_split

آرایه 1 بعدی مثل یک صف عدد است. می خواهیم این صف را به چند بخش پشت سر هم تقسیم کنیم.

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6])

newarr = np.array_split(arr, 3)

print(newarr)

مشاهده در ادیتور

تابع array_split() اینجا آرایه را به سه قسمت تبدیل می کند. خروجی یک لیست است که هر خانه اش خودش یک آرایه جداگانه است.

کم بودن تعداد عنصرها در تقسیم

اگر تعداد عنصرها با تعداد قسمت ها دقیقا جور نباشد، array_split() از انتهای آرایه کمی جابه جا می کند تا تقسیم منطقی شود.

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6])

newarr = np.array_split(arr, 4)

print(newarr)

مشاهده در ادیتور

نکته مهم این است که تابع split() این انعطاف را ندارد و در چنین حالتی خطا می دهد؛ اما array_split() هوشمندتر رفتار می کند.

دسترسی به آرایه های تکه تکه شده

خروجی array_split() یک لیست از آرایه ها است. پس می توانی مثل هر لیست معمولی به اندیس هایش دسترسی بگیری.

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6])

newarr = np.array_split(arr, 3)

print(newarr[0])
print(newarr[1])
print(newarr[2])

مشاهده در ادیتور

اینجا سه آرایه جداگانه داریم و هر کدام را با اندیس خودش چاپ می کنیم. دقیقا مثل دسترسی به خانه های یک لیست معمولی در پایتون.

تقسیم آرایه های 2 بعدی روی ردیف ها

آرایه 2 بعدی مثل یک جدول است. وقتی آن را تقسیم می کنیم، می توانیم جدول را به چند جدول کوچکتر روی ردیف ها بشکنیم.

import numpy as np

arr = np.array([[1, 2],
                [3, 4],
                [5, 6],
                [7, 8],
                [9, 10],
                [11, 12]])

newarr = np.array_split(arr, 3)

print(newarr)

مشاهده در ادیتور

نتیجه سه آرایه 2 بعدی است. هر کدام چند ردیف از جدول اصلی را دارد؛ انگار جدول را به سه بخش عمودی تقسیم کرده ای.

تقسیم آرایه های 2 بعدی با ستون های بیشتر

اگر هر ردیف سه ستون داشته باشد، باز هم می توانیم همان دستور را استفاده کنیم. فقط شکل هر تکه کمی عوض می شود، اما ایده همان است.

import numpy as np

arr = np.array([[1, 2, 3],
                [4, 5, 6],
                [7, 8, 9],
                [10, 11, 12],
                [13, 14, 15],
                [16, 17, 18]])

newarr = np.array_split(arr, 3)

print(newarr)

مشاهده در ادیتور

باز هم نتیجه سه آرایه 2 بعدی است. این بار هر ردیف سه ستون دارد، اما منطق تقسیم روی ردیف ها ثابت مانده است.

تقسیم روی محورهای مختلف با axis

پارامتر axis مشخص می کند جداسازی روی کدام محور انجام شود. برای آرایه 2 بعدی، axis=0 یعنی روی ردیف ها و axis=1 یعنی روی ستون ها.

import numpy as np

arr = np.array([[1, 2, 3],
                [4, 5, 6],
                [7, 8, 9],
                [10, 11, 12],
                [13, 14, 15],
                [16, 17, 18]])

newarr = np.array_split(arr, 3, axis=1)

print(newarr)

مشاهده در ادیتور

در این مثال، جدول را از سمت ستون ها به سه جدول کوچکتر تقسیم می کنیم. هر جدول چند ستون از جدول اصلی را در خودش نگه می دارد.

hsplit، vsplit و dsplit در نامپای

تابع hsplit() یک میانبر برای تقسیم افقی است؛ یعنی روی ستون ها. این تابع برعکس تابع hstack() عمل می کند که برای ترکیب بود.

import numpy as np

arr = np.array([[1, 2, 3],
                [4, 5, 6],
                [7, 8, 9],
                [10, 11, 12],
                [13, 14, 15],
                [16, 17, 18]])

newarr = np.hsplit(arr, 3)

print(newarr)

مشاهده در ادیتور

علاوه بر این، توابع vsplit() و dsplit() هم وجود دارند که برعکس vstack() و dstack() هستند و روی ردیف ها و عمق کار می کنند.

تمرین عملی برای تقسیم آرایه ها در نامپای

برای تمرین، قدم به قدم پیش برو:

  1. یک آرایه 1 بعدی با 9 عدد بساز و آن را با array_split() به 4 قسمت تقسیم کن و خروجی را چاپ کن.
  2. یک آرایه 2 بعدی شبیه مثال ها بساز و آن را هم با axis=0 و هم با axis=1 تقسیم کن و شکل هر قسمت را بررسی کن.
  3. برای آرایه 2 بعدی از hsplit()، vsplit() و اگر سه بعدی ساختی از dsplit() استفاده کن و با بخش ترکیب آرایه ها (Array Join) مقایسه کن.

اگر شکل آرایه ها برایت مبهم است، صفحه شکل آرایه (Array Shape) را مرور کن. برای مرور کلی، صفحه تقسیم آرایه ها در نامپای می تواند مرجع همیشه گی تو باشد.

جمع بندی سریع

  • تقسیم آرایه ها در نامپای برعکس ترکیب آرایه ها است.
  • array_split() آرایه را به چند تکه تبدیل می کند و خروجی اش لیست است.
  • تابع split() انعطاف array_split() را در تقسیم نابرابر ندارد.
  • با پارامتر axis می توانی روی ردیف ها یا ستون ها تقسیم کنی.
  • hsplit()، vsplit() و dsplit() نسخه های مخصوص تقسیم روی محورهای مختلف هستند.