تغییر شکل آرایهها در NumPy
کلمهی Reshaping یعنی تغییر دادنِ شکلِ(shape) یک آرایه.
به تعداد عناصری که در هر بُعد(dimension) قرار دارند، شکل آرایه گفته میشود.
با تغییر دادن شکل(reshaping)، میتوانیم ابعادی را اضافه یا حذف کنیم یا تعداد عناصر درون هر بُعد را تغییر دهیم.
Reshape کردن از 1 بُعدی به 2 بُعدی
مثال شماره 1
تبدیل آرایهی 1 بُعدی زیر که 12 عنصر دارد به یک آرایهی 2 بُعدی.
بیرونیترین بُعد، 4 آرایه خواهد داشت که هرکدام سه عنصر دارند:
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)
نتیجه:
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
Reshape کردن از 1 بُعدی به 3 بُعدی
مثال شماره 2
تبدیل آرایهی 1 بُعدی زیر که 12 عنصر دارد به یک آرایهی 3 بُعدی.
بیرونیترین بُعد، 2 آرایه خواهد داشت که هرکدام حاوی سه آرایه هستند؛ که هریک از اینها نیز 2 عنصر دارند:
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)
نتیجه:
[[[ 1 2]
[ 3 4]
[ 5 6]]
[[ 7 8]
[ 9 10]
[11 12]]]
آیا میتوانیم به هر شکلی(Shape) تغییرِ شکل(Reshape) دهیم؟
بله، تا زمانی که عناصر مورد نیاز برای reshape کردن، در هردو شکل برابر باشند.
ما میتوانیم یک آرایهی 1بُعدی که 8 عنصر دارد را به یک آرایهی 2 بُعدی که در دو ردیف، 4 عنصر دارد تغییر شکل دهیم. اما نمیتوانیم آن را به یک آرایه که یک آرایهی 2 بُعدی تغییر شکل دهیم که سه ردیف دارد که در هر ردیف 3 عنصر وجود دارد؛ زیرا در آن، نیاز به 3x3 = 9 عنصر است.
مثال شماره 3
در این مثال سعی میکنیم یک آرایهی 1 بُعدی که 8 عنصر دارد را به یک آرایهی 2 بُعدی که در هر بُعد 3 عنصر دارد تبدیل کنیم(که یک خطا ایجاد میکند):
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
newarr = arr.reshape(3, 3)
print(newarr)
نتیجه:
Traceback (most recent call last):
File "demo_numpy_array_reshape_error.py", line 5, in <module>
ValueError: cannot reshape array of size 8 into shape (3,3)
امتحان کنیدبرگرداندن Copy یا View؟
مثال شماره 4
بررسی اینکه آیا آرایهی برگردانده شده، یک Copy است یا یک View:
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
print(arr.reshape(2, 4).base)
نتیجه:
[1 2 3 4 5 6 7 8]
امتحان کنیدمثال بالا، آرایهی اصلی را برمیگرداند، بنابراین یک view محسوب میشود.
ابعاد ناشناخته(Unknown Dimension)
ما مجاز هستیم یک بُعدِ ناشناخته داشته باشیم.
یعنی اینکه مجبور نیستیم در متد reshape برای یکی از ابعاد، یک عدد صحیح(exact) را مشخص کنیم.
ما میتوانیم به جای مقدار ناشناخته، از مقدار -1 استفاده کنیم؛ با انجام این کار، NumPy این عدد را برای ما محاسبه میکند.
مثال شماره 5
تبدیل یک آرایهی 1 بُعدی با 8 عنصر، به یک آرایهی سه بعدی با عناصرِ 2×2 (مترجم: شاید به نظر برسه به یک آرایهی سه بعدی با عناصر 2×1 تبدیل شده، اما این طور نیست):
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
newarr = arr.reshape(2, 2, -1)
print(newarr)
نتیجه:
[[[1 2]
[3 4]]
[[5 6]
[7 8]]]
امتحان کنیدنکته: ما نمیتوانیم مقدار -1 را به بیش از یک بُعد پاس دهیم.
مسطح کردن آرایه ها(Flattening)
مسطح کردن آرایه، یعنی اینکه یک آرایهی چند بُعدی را به یک آرایهی 1 بُعدی تبدیل کنیم. برای انجام این کار، میتوانیم از دستور reshape(-1) استفاده کنیم.
مثال شماره 6
تبدیل آرایه یه یک آرایهی 1 بُعدی مسطح:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
newarr = arr.reshape(-1)
print(newarr)
نتیجه:
[1 2 3 4 5 6]
امتحان کنیدنکته: برای تغییر دادن شکل آرایهها در NumPy تابعهای همچون flatten و ravel وجود دارند و همچنین برای بازآرایی آنها، تابعهای rot90 و flip و fliplr و flipud و غیره استفاده میشوند. اینها تحت تاثیرِ بخشِ متوسط تا پیشرفتهی NumPy است.
منبع: www.w3schools.com/python/numpy
- بازدید: 51
1. سعی کنید نظرات شما مرتبط با مقاله ی مورد نظر باشد، در غیر این صورت پاسخ داده نخواهد شد.
2. سوالات خود را به صورت کوتاه بیان کنید و از پرسیدن چند سوال به طور همزمان خودداری کنید.
3. سوال خود را به طور واضح بیان کنید و از کلمات مبهم استفاده نکنید.