تغییر شکل آرایه در Numpy

تغییر شکل در آرایه یعنی ویژگی هایی مثل تعداد ابعاد و المان های درون آرایه را کم اضافه و یا تغییر دهیم.

تغییر شکل آرایه از 1D به 2Dدر Numpy

تابع reshape سه متغیر میگیرد که حداقل دوتا از ان اجباری است به ترتیب از سمت چپ تعداد آرایه تعداد ردیف و تعداد المان در هر ردیف هارا را دریافت میکند.

برای تبدیل آرایه یک بعدی ساده به دو بعدی باید دو مقدار تعداد ردیف و تعداد المان در هر ردیف باید وارد کنیم در مثال زیر یک آرایه دو بعدی با چهار ردیف با تعداد المان سه تا در هر ردیف ایجاد میکنیم:

newarr = arr.reshape(4, 3)

تغییر شکل آرایه از 1D به 3Dدر Numpy

همانطور که بالاتر گفتیم این تابع تا سه متغیر دریافت میکند که سومین آن تعداد ابعاد آرایه هست.

برای تبدیل آرایه یک بعدی به سه بعدی باید اینبار سه مقدار تعداد آرایه تعداد ردیف و تعداد المان در هر ردیف باید وارد کنیم در مثال زیر یک آرایه سه بعدی با دو آرایه سه ردیف با تعداد المان دو تا در هر ردیف ایجاد میکنیم:

newarr = arr.reshape(2, 3, 2)

ما میتونیم هر آرایه ایی رو تغییر شکل بدهیم ؟ Numpy

جواب بله هست تا زمانی که آرایه ایی که بخواهیم تبدیل کنیم المان مورد نیاز در دو طرف برای تبدیل را داشته باشد.

برای درک بهتر به مثال زیر دقت کنید که یک آرایه با هشت المان را میخواهیم به یک آرایه دو بعدی با سه  ردیف و سه المان در هر ردیف تبدیل کنیم اما ممکن پذیر نیست چون برای این کار ما به نه المان نیاز داریم و هشتا کافی نیست:

newarr = arr.reshape(3, 3)

آرایه تغییر شکل داده شده copy هست یا view در Numpy

برای این کار کافی هست که با کمک ویژگیه base بعد از تغییر شکل آرایه استفاده کنیم تا متوجه شویم آرایه جدید یک کپی وابسته به آرایه اصلی هست یا مستقل .

در مثال زیر ما اینکار را کرده ایم:

print(arr.reshape(2, 4).base)

بعد نامشخص آرایه در Numpy

گاهی ممکن است بدلیل زیاد بودن المان های یک آرایه نتوانیم تعداد آنهارا بدست بیاوریم و حساب کنیم که چه مقدار به هر ردیف بدهیم در این زمان میتوانیم از 1- استفاده کنیم که خود آرایه به اندازه مناسب المان هارو پخش میکند اما به شرطی که تعداد المان ها بر تعداد ردیف ها قابل تقیسم باشد.

در مثال زیر با همین متد هشت المان را در دو ردیف تقسیم میکند و یک آرایه دو بعدی میسازد:

newarr = arr.reshape(2, 2, -1)

صاف کردن آرایه در Numpy

شاید به ذهنتون خطور کرده باشد که اگر میتوانیم آرایه تک بعدی را به دو و یا سه بعدی تبدیل کنیم پس ایا میتواینم برعکس این کار را انجام دهیم؟ 

باید بگم بله flatting array یا صاف کردن آرایه برای این است که آرایه های چند بعدی را به آرایه ساده تک بعدی تبدیل کنیم که اینکار را با کمک تابع reshape انجام میدهیم که برای مقادیر آن 1- وارد میکنیم.

در مثال زیر ما اینکار را انجام داده ایم و یک آرایه دوبعدی را به یک آرایه تک بعدی تبدیل کرده ایم:

ewarr = arr.reshape(-1)
توسعه دهندگان
احمدرضا آهنگریان