NumPy Splitting Array

جداسازی آرایه‌های NumPy

جداسازی عکس عملیات الحاق است. بوسیله عمل الحاق ۲ یا چندین آرایه را به یک آرایه ادغام می‌کردیم ولی در عمل جداسازی یک آرایه به چندین آرایه شکسته می‌شود.

آرایه‌ مورد نظر را همراه با تعداد تقسیمات به تابع array_split() می‌دهیم. به عنوان مثال در زیر آرایه را به ۳ آرایه دیگر تقسیم کرده‌ایم.


import numpy as np

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

newarr = np.array_split(arr, 3)

print(newarr)

خروجی:

مقدار برگردانده شده، یک آرایه شامل سه آرایه است.

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


import numpy as np

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

newarr = np.array_split(arr, 4)

print(newarr)

خروجی:

برای جداسازی آرایه‌ها تابع split() نیز وجود دارد. ولی این تابع در صورتی که تعداد عناصر مورد نیاز برای شکستن آرایه اصلی به تعداد آرایه‌های داده شده کافی نباشد، خود را تطبیق نمی‌دهد. مثلا در کد بالا تابع array_split() به خوبی جواب داد در حالیکه تابع 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])

خروجی:

جداسازی آرایه‌های دو بعدی

دقیقا از همان دستورات گفته شده استفاده کنید.

آرایه مورد نظر را همراه با تعداد تقسیمات به تابع شیء array_split() بدهید.


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)

خروجی:

چنانکه ملاحظه می‌کنید خروجی کد بالا یک آرایه شامل سه آرایه دو بعدی است.

بیایید مثال دیگری را بررسی کنیم. این بار هر عنصر آرایه دو بعدی خود شامل سه عنصر است. می‌خواهیم این آرایه دو بعدی را به ۳ آرایه دو بعدی جداسازی کنیم.


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)

خروجی:

چنانکه ملاحظه می‌کنید خروجی کد بالا یک آرایه شامل سه آرایه دو بعدی است.

علاوه بر این شما می‌توانید محوری که می‌خواهید جداسازی حول آن انجام شود را نیز مشخص کنید.

مثال زیر هم یک آرایه شامل سه آرایه دو بعدی را برمی‌گرداند با این تفاوت که جداسازی حول سطرها (1=axis) انجام شده است.


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() (متضاد 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)

خروجی:

راه‌های جایگزین مشابه با vstack() و dstack() به صورت vsplit() و dsplit() نیز در دسترس هستند.