در مطلب ایجاد آرایه ها بوسیله ماژول NumPy در مورد روش های متفاوت ایجاد آرایه ها در پایتون و بوسیله کتابخانه NumPy صحبت کردیم. این آرایه ها می توانند تک بعدی، دو بعدی یا بیش از دو بعد باشند. هر شی از نوع آرایه NumPy به یک خصوصیت به نام shape دسترسی دارد که ساختار آرایه را نشان می دهد.

در این تصویر آرایه my_numpy_list یک آرایه تک بعدی با ۵ سطر و در این تصویر آرایه new_2d_arr یک آرایه دو بعدی با سه سطر و سه ستون است. در کتابخانه NumPy و مطابق کدهای زیر متد ()shape وجود دارد که نام یک شی آرایه NumPy را دریافت و بعدهای آنرا را برگشت می دهد.

کاربرد خصوصیت shape در پردازش تصویر با OpenCV و پایتون: خصوصیت های تصویر با پایتون و OpenCV

متد ()reshape برای تغییر شکل آرایه NumPy

متد ()reshape برای تغییر دادن شکل یک آرایه، بدون آنکه داده ای از دست برود، به کار گرفته می شود. آرگومان نخست متد ()reshape نام شی آرایه NumPy و آرگومان دوم آن بعد تازه ای است که می خواهیم برای آرایه تعیین کنیم. آرگومان دوم می تواند یک عدد صحیح یا یک تاپل (Tuple) باشد.

بوسیله متد ()reshape می توانیم یک آرایه تک بعدی را به یک آرایه دو ستونی و دو سطری تبدیل کنیم، پس آرگومان دوم باید یک تاپل به صورت (2 ,2) باشد که عنصر نخست تاپل تعداد سطر و عنصر دوم آن تعداد ستون را مشخص می کند. در کد زیر ابتدا یک آرایه تک بعدی از عددهای صفر تا ۲۳ (پیش از عدد ۲۴) ایجاد شده و سپس آنرا بدون آنکه داده ای از دست برود، به یک آرایه سه بعدی تبدیل می کنیم.

با توجه به تاپل (3,4,2) که به متد ()reshape فرستاده شده است، در شکل بالا می بینید که آرایه دارای سه زیر آرایه درونی است که هر کدام دارای چهار زیر آرایه درونی خودشان هستند که هر کدام از آنها نیز دارای دو عنصر عدد صحیح هستند. توجه کنید حاصل ضرب 3x4x2 برابر با ۲۴ می شود که این برابر است با ۲۴ عنصر عددی درون کل آرایه (عدد صفر تا ۲۳)

در شکل زیر می بنید که به دلیل تعیین کردن عددهای 3x4x3 که حاصل آن ۳۶ می شود، خطا رخ داده است. پیام خطا، cannot reshape array of size 24 into shape (3,4,3) نشان می دهد که نمی توانیم آرایه ابتدایی ۲۴ عنصری را به آرایه ۳۶ عنصری تبدیل کنیم.

ولی در کدهای زیر چون حاصل ضرب عددها برابر با ۲۴ اس، هیچ مشکلی نیست ولی دو آرایه با داده های یکسان ولی با شکل های متفاوت ایجاد می شود.

کاربرد متد ()shape در پردازش تصویر با OpenCV و پایتون: بررسی معادل بودن دو تصویر در OpenCV

تبدیل آرایه به آرایه تک بعدی با متد ()flatten

در کد زیر همان آرایه سه بعدی arr_3d که پیش از این ایجاد کرده بودیم را می خواهیم به یک آرایه تک بعدی و به صورت ذخیره سازی سطری (Row Store) تبدیل کنیم. برای این منظور متد ()flattent را به کار برده ایم. همانطور که می بنید این متد بوسیله شی آرایه NumPy در دسترس است. در شکل زیر می توانید تفاوت دو آرایه را ببنید

متد ()fatten دارای یک آرگومان به نام order با سه مقدار از پیش تعیین شده ‘C’ و ‘F’ و ‘A’ است که در میان آنها مقدار پیش فرض کاراکتر ‘C’ است که به مفهوم تبدیل کردن آرایه به یک آرایه تک بعدی و با ذخیره سازی سطری است. بنابراین اگر آرگومان order تعیین نشود، مقدار پیش فرض آن به کار خواهد رفت.

دانلود سورس این مطلب Numpy array reshape