NumPy Array Reshaping

بازآرایی آرایه‌ها

منظور از بازآرایی آرایه‌ها، تغییر آرایش یک آرایه است. با استفاده از بازآرایی آرایه‌ها می‌توان ابعاد یک آرایه را حذف و یا به آن بیافزاییم و همچنین می‌توان تعداد عناصر موجود در هر بعد را تغییر داد.

بازآرایی یک آرایه یک بعدی به یک آرایه دو بعدی

در کد زیر یک آرایه یک بعدی با ۱۲ عنصر را به یک آرایه دو بعدی ۴ در ۳ (بیرونی‌ترین لایه دارای ۴ آرایه که هر یک دارای ۳ عنصر هستند) تبدیل کرده‌ایم.


import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])

newarr = arr.reshape(4, 3)

print(newarr)

خروجی:

بازآرایی یک آرایه یک بعدی به یک آرایه سه بعدی

در کد زیر یک آرایه یک بعدی با ۱۲ عنصر را به یک آرایه سه بعدی ۲ در ۳ در ۲ (بیرونی‌ترین لایه دارای ۲ آرایه که هر یک دارای ۳ آرایه که هر یک دارای ۲ عنصر هستند) تبدیل کرده‌ایم.


import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])

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

print(newarr)

خروجی:

آیا مجازیم آرایه را به هر آرایش دلخواهی بازآرایی کنیم؟

بله به شرط آنکه تعداد عناصر موجود در هر دو آرایش با هم برابر باشند.

مثلا می‌توان یک آرایه یک بعدی با ۸ عنصر را به یک آرایه دو بعدی ۴ در ۲ تبدیل کرد زیرا در هر دو ۸ عنصر وجود دارد ولی نمی‌توان آن را به یک آرایه ۳ در ۳ تبدیل کرد زیرا در این صورت به ۹ عنصر نیازمندیم در حالیکه تعداد عناصر موجود ۸ عنصر است.

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


import numpy as np

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

newarr = arr.reshape(3, 3)

print(newarr)

خروجی:

توجه داشته باشید که آرایه ذخیره شده از بازآرایی یک view است. در نتیجه تغییر در هر کدام از آن‌ها در دیگری نیز اعمال خواهد شد.

بعد مجهول

اجازه داریم که یک بعد مجهول داشته باشیم. به این معنی که لازم نیست تعداد عناصر دقیق مربوط به آن بعد را در دستور reshape وارد کنیم.

برای بعد مجهول عدد -1 را وارد و NumPy آن را برای شما محاسبه می‌کند.


import numpy as np

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

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

print(newarr)

خروجی:

فلت کردن آرایه‌ها

فلت کردن (flattening) به این معنی است که آرایه چند بعدی را به آرایه یک بعدی تبدیل کنیم. یکی از راه‌های انجام این کار استفاده از دستور reshape(-1) است.


import numpy as np

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

newarr = arr.reshape(-1)

print(newarr)

خروجی:

تغییر شکل و بازآرایی آرایه‌ها بسیار پر کاربرد و مهم است. به همین جهت در NumPy تعداد توابع زیادی به این کار اختصاص داده شده است از جمله توابع flatten ،ravel و همچنین توابعی نظیر rot90 ،flip ،fliplr ،flipud و ...