ترکیب آرایه ها (Array Join)
در این بخش با ترکیب آرایه ها در نامپای آشنا می شوی؛ یعنی چطور چند آرایه را کنار هم بچینیم. مثل وقتی دو لیست حضور و غیاب کلاس را یکی می کنی تا یک لیست کامل داشته باشی.
ترکیب آرایه ها در نامپای یعنی چه؟
Joining یعنی گذاشتن محتویات دو آرایه یا بیشتر در یک آرایه. در دیتابیس و SQL، جدول ها را با کلید مشترک وصل می کنیم؛ اما در نامپای، آرایه ها را روی محورهای مختلف axis کنار هم می چینیم.
تابع np.concatenate برای ترکیب آرایه ها استفاده می شود. به آن دنباله ای از آرایه ها و محور axis را می دهیم. اگر axis ندهیم، مقدار پیش فرض صفر است.
ترکیب آرایه های 1 بعدی با concatenate
آرایه 1 بعدی مثل یک صف ساده از عددها است. وقتی دو آرایه 1 بعدی را با concatenate ترکیب می کنی، مثل این است که دو صف را پشت هم قرار بدهی.
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr = np.concatenate((arr1, arr2))
print(arr)
خروجی آرایه ای است که اعداد هر دو آرایه را پشت سر هم نشان می دهد. یعنی [1 2 3 4 5 6].
ترکیب آرایه های 2 بعدی روی محورهای مختلف
در آرایه 2 بعدی، axis=0 یعنی روی ردیف ها، و axis=1 یعنی روی ستون ها کار می کنیم. در این مثال، دو جدول هم اندازه را از کنار به هم می چسبانیم.
import numpy as np
arr1 = np.array([[1, 2],
[3, 4]])
arr2 = np.array([[5, 6],
[7, 8]])
arr = np.concatenate((arr1, arr2), axis=1)
print(arr)
اینجا ستون های آرایه دوم به ستون های آرایه اول چسبیده اند. شرط مهم این است که تعداد ردیف ها یکسان باشد.
ترکیب آرایه ها با stack و محور جدید
Stacking هم شبیه concatenate است؛ اما یک محور جدید می سازد. یعنی آرایه ها را مثل دو برگه روی هم می گذاری، نه فقط کنارش.
تابع np.stack دنباله ای از آرایه ها را می گیرد و آن ها را روی محور جدید کنار هم قرار می دهد.
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr = np.stack((arr1, arr2), axis=1)
print(arr)
در این حالت، آرایه جدید دو ستون دارد؛ هر ستون از یکی از آرایه های قبلی آمده است.
stack آماده روی ردیف ها: hstack
تابع np.hstack یک میانبر برای چیدن آرایه ها به صورت افقی است. یعنی شبیه ترکیب روی ردیف ها در سطح 1 بعدی.
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr = np.hstack((arr1, arr2))
print(arr)
خروجی مثل concatenate برای همین مثال است؛ اما نوشتن hstack خواناتر است.
stack عمودی روی ستون ها: vstack
تابع np.vstack آرایه ها را زیر هم قرار می دهد. یعنی مثل دو ردیف جدید که به جدول اضافه می کنی.
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr = np.vstack((arr1, arr2))
print(arr)
حالا آرایه جدید دو ردیف دارد. ردیف اول از arr1 و ردیف دوم از arr2 آمده است.
stack روی ارتفاع (عمق): dstack
تابع np.dstack آرایه ها را روی محور عمق می چیند. این را مثل ساختن چند لایه تصویر روی هم تصور کن.
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr = np.dstack((arr1, arr2))
print(arr)
نتیجه یک آرایه سه بعدی است. هر عدد در یک لایه عمقی قرار می گیرد.
تمرین عملی برای ترکیب آرایه ها در نامپای
برای تمرین، این گام ها را انجام بده:
- دو آرایه 1 بعدی بساز و آن ها را با
concatenateترکیب کن. - دو آرایه 2 بعدی هم اندازه بساز و آن ها را با
axis=0و بعد باaxis=1ترکیب کن و تفاوت را ببین. - از
hstack،vstackوdstackبرای همان آرایه ها استفاده کن و شکل خروجی را باprintبررسی کن.
اگر شکل آرایه ها را کامل یادت نیست، صفحه شکل آرایه (Array Shape) کمک بزرگی است. برای کارهای بیشتر روی حلقه ها، صفحه حلقه روی آرایه (Array Iterating) را هم ببین.
در نهایت، این صفحه یعنی ترکیب آرایه ها در نامپای مرجع اصلی تو برای جمع بندی روش های مختلف join و stack است.
جمع بندی سریع
- ترکیب آرایه ها در نامپای یعنی کنار هم گذاشتن چند آرایه.
np.concatenateآرایه ها را روی محور مشخص ترکیب می کند.np.stackمحور جدید می سازد و آرایه ها را روی آن می چیند.hstackبرای ترکیب افقی،vstackبرای عمودی وdstackبرای عمق است.- قبل از ترکیب، ابعاد و طول های مؤلفه ها باید سازگار باشند.