یادآوری : توابعی مثل:
mean
sum
max
min
std
تعداد ابعاد را کم میکنند.
◀️مثلاً:
X.shape
برابر است با:
(2, 3)
اما:
np.mean(X, axis=0)
خروجی:
[2.5, 3.5, 4.5]
شکل خروجی:
(3,)
↩️دقت کنید:
(2,3)
↓
(3,)
بُعد ِشماره 0 حذف شده است.
⏺چرا میانگین ستونها محاسبه میشود؟
چون NumPy باید بُعد 0 را حذف کند.
برای حذف آن مجبور است مقادیر موجود در آن بعد را با هم ترکیب کند:
[[1,2,3],
[4,5,6]]
●بُعد صفر شامل این دو سطر است:
row0
row1
پس:
(1,4) → 2.5
(2,5) → 3.5
(3,6) → 4.5
◀️نتیجه:
[2.5, 3.5, 4.5]
axis=1
چه میکند؟
np.mean(X, axis=1)
نامپای میگوید :
> بُعد شماره 1 را حذف کن.
بُعد 1 همان ستونها هستند.
پس:
[1,2,3] → 2
[4,5,6] → 5
■نتیجه:
[2,5]
⏪شکل خروجی:
(2,)
چون بعد 1 حذف شده است.
↔️حرفهایتر فکر کنیم:
به جای فکر کردن به «سطر» و «ستون»، به شکل آرایه نگاه کنید.
مثلاً:
X.shape = (100, 50)
یعنی:
axis=0 → 100
axis=1 → 50
وقتی میگویید:
np.mean(X, axis=0)
در واقع میگویید:
⬅️ آن 100 مقدار را به یک مقدار تبدیل کن.
بنابراین:
(100,50)
↓
(50,)
وقتی میگویید:
np.mean(X, axis=1)
میگویید:
⬅️ آن 50 مقدار را به یک مقدار تبدیل کن.
بنابراین:
(100,50)
↓
(100,)
↖️↘️↙️مثال سهبعدی (جایی که حفظ کردن سطر و ستون دیگر جواب نمیدهد)
فرض کنید:
X.shape = (10, 20, 30)
اینجا دیگر سطر و ستون معنای روشنی ندارند.
اما مفهوم axis کاملاً روشن است:
np.mean(X, axis=0)
شکل خروجی:
(20,30)
زیرا بُعد اول حذف شده است.
np.mean(X, axis=1)
⬅️خروجی:
(10,30)
np.mean(X, axis=2)
خروجی:
(10,20)
👁🗨قاعدهی حرفهای ها
بسیاری از برنامهنویسان باتجربه اصلاً به «سطر» و «ستون» فکر نمیکنند.
🔄آنها فقط این قانون را به خاطر میسپارند:
آکسیس مشخص میکند کدام بُعد کاهش (reduce) پیدا کند و از خروجی حذف شود.
یا حتی کوتاهتر:
➡️ Axis = dimension to collapse.
اگر این جمله را بفهمیم، دیگر هیچوقت در NumPy، Pandas، TensorFlow، PyTorch یا JAX در مورد axis گیج و ویج نخواهیم شد.
#کاهش_ابعاد
#NumPy
#TensorFlow
#Tensor
#PyTorch
@toobabigdatascience