اتصال (joining) آرایهها در numpy بدین معناست که دادههای موجود در دو یا چند آرایه را در داخل یک آرایه قرار دهیم. پیش از آشنایی با توابع مناسب برای این انجام این کار، لازم است تا با مفهوم محور (axis) در آرایه آشنا شویم.
محور در آرایه numpy چیست؟
مفهوم محور در آرایه، تقریبا شبیه به مفهوم بعد است. در بعضی از توابع numpy مانند تابع sum، هنگام کار با آرایهها، میتوان مشخص کرد که آرایهها چگونه با یکدیگر ترکیب شوند. برای روشن شدن موضوع، آرایه دو بعدی زیر را در نظر بگیرید:
,[A = [ [1, 2, 3
[ [۴, ۵, ۶]
این آرایه دو بعدی، از دو آرایه یک بعدی تشکیل شده است؛ هر یک از آرایههای یک بعدی نیز سه درایهی اسکالر دارند.
جمع درایههای آرایهی بالا به روشهای مختلفی امکانپذیر است. دو روش مهم جمع درایههای آرایه عبارتند از:
راه اول (جمع درایههای هر ستون):
[Sum = [5, 7, 9
راه دوم (جمع درایههای هر سطر):
[Sum = [6, 15
البته در هر روش میتوان بعد آرایه را حفظ کرد و آن را به شکل مسطح ننوشت. اصطلاحا در راه اول میگوییم جمع را حول محور صفر (axis = 0) انجام دادهایم و در راه دوم، جمع را حول محور یک (axis = 1) انجام دادهایم. در واقع در محور صفر، به شکل ستونی به مسئله نگاه میکنیم و در محور یک، به شکل سطری.
اتصال آرایهها در numpy با استفاده از تابع concatenate
این تابع، دو یا چند آرایه را به صورت یک تاپل میگیرد و آنها را به هم متصل میکند. به مثال زیر توجه کنید:
1 2 3 4 5 6 7 8 9 |
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 7 8 9 |
import numpy as np arr1 = np.array([[1, 2], [3, 4]]) arr2 = np.array([[5, 6], [7, 8]]) arr = np.concatenate((arr1, arr2)) print(arr) |
خروجی:
,[۲ ,۱] ]
,[۴ ,۳]
,[۶ ,۵]
[ [۸ ,۷]
1 2 3 4 5 6 7 8 9 |
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) |
,[۵ ,۵ ,۲ ,۱] ]
[ [۸ ,۷ ,۴ ,۳]
اتصال آرایهها در numpy با استفاده از تابع stack
تابع stack نیز مانند concatenate عمل میکند اما محورهای آرایه نهایی کمی متفاوت است. به مثال زیر توجه کنید:
1 2 3 4 5 6 7 8 9 |
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 با نتیجه به دست آمده با تابع concatenate متفاوت است.
با استفاده از تابع hstack میتوانید کاری مشابه تابع concatenate حول محور صفر برای آرایههای یک بعدی انجام دهید. به مثال زیر توجه کنید:
1 2 3 4 5 6 7 8 9 |
import numpy as np arr1 = np.array([1, 2, 3]) arr2 = np.array([4, 5, 6]) arr = np.hstack((arr1, arr2)) print(arr) |
1 2 3 4 5 6 7 8 9 |
import numpy as np arr1 = np.array([1, 2, 3]) arr2 = np.array([4, 5, 6]) arr = np.vstack((arr1, arr2)) print(arr) |