Broadcasting قراردادی برایِ سازگارکردنِ شکلِ آرایهها در عملیاتِ عنصربهعنصر است. محورهایِ دو ورودی را از سمتِ راست تطبیق میدهیم؛ اگر دو اندازه برابر باشند یا یکی۱ باشد، آن محور سازگار است. این راهنما شکلِ خروجی و اندیسِ مبدأِ تکتکِ خانهها را با یک شبیهسازِ مستقل حساب میکند؛ ضربِ ماتریسی انجام نمیدهد.
از راست مقایسه کنیم، نه از نامِ «سطر»
شکلهایِ(۲،۱،۳) و(۱،۴،۱) را داریم. در راستترین محور،۳با۱ به۳ میرسد؛ در محورِ میانی۱با۴ به۴ و در چپ۲با۱ به۲ میرسد. خروجی(۲،۴،۳) است، یعنی۲۴خانه. محورِ اندازهٔ۱، همان خانهٔ خودش را برایِ چند اندیسِ خروجی در اختیار میگذارد؛ به معنیِ خواندنِ خانههایِ ناموجود از ورودی نیست.
A: 2 x 1 x 3
B: 1 x 4 x 1
A + B: 2 x 4 x 3شبیهساز برایِ هر اندیسِ خروجی، در محورِ۱ اندیسِ مبدأ را صفر و در محورهایِ دیگر همان اندیس را نگه میدارد. مقایسه از راست همچنین اجازه میدهد تعدادِ محورهایِ دو ورودی متفاوت باشد؛ محورهایِ ابتداییِ حذفشده برایِ تطبیق،۱ فرض میشوند.
یک خانه را تا دو ورودی دنبال کنیم
مقدارهایِ A در دو بخشِ(۰،۱،۲) و(۱۰۰،۱۰۱،۱۰۲) قرار دارند. چهار مقدارِ B در محورِ میانی۰،۱۰۰،۲۰۰،۳۰۰ هستند. خانهٔ خروجیِ(۱،۲،۲) از A[۱،۰،۲]=۱۰۲ و B[۰،۲،۰]=۲۰۰ میآید؛ جمع۳۰۲ است. این سهتاییها صفرمبنا هستند و اعداد، ساختگیاند.
| اندیسِ خروجی | اندیسِ A | اندیسِ B | جمع |
|---|---|---|---|
| (۰،۰،۰) | (۰،۰،۰) | (۰،۰،۰) | ۰ |
| (۰،۳،۱) | (۰،۰،۱) | (۰،۳،۰) | ۳۰۱ |
| (۱،۲،۲) | (۱،۰،۲) | (۰،۲،۰) | ۳۰۲ |
| (۱،۳،۲) | (۱،۰،۲) | (۰،۳،۰) | ۴۰۲ |
فایلِ JSON همهٔ۲۴خانه را دارد؛ تنها این چهار نمونه نمایش داده شدهاند. فایلِ Python از شکل و مقدارهایِ تختِ ورودی استفاده میکند، اندیسِ چندمحوره را به جایگاهِ تخت تبدیل میکند و هر جمع را مینویسد. ترتیبِ تختسازیِ این تمرین، حرکتِ سریعترِ راستترین محور است.
وقتی یک محور از ابتدا وجود ندارد
بردارِ شکلِ(۳،) با مقدارهایِ۱،۲،۳ را با آرایهٔ شکلِ(۲،۱) و مقدارهایِ۱۰،۲۰ جمع میکنیم. برایِ تطبیق، اولی مانندِ(۱،۳) دیده میشود؛ نتیجه(۲،۳) است و ردیفهایِ[۱۱،۱۲،۱۳] و[۲۱،۲۲،۲۳] میدهد. اینجا ستونِ اندازهٔ۱ در یک طرف و محورِ ابتداییِ حذفشده در طرفِ دیگر گسترش یافتهاند.
اسکالر شکلِ() دارد و تنها یک مقدار. مثالِ۵ با بردارِ[۱،۲]، خروجیِ[۶،۷] میدهد و اندیسِ مبدأِ اسکالر در هر دو خانه همان() است. برنامه این حالت را هم اجرا میکند. «خالیبودنِ tupleِ شکل» با آرایهای دارایِ محورِ طولِ صفر فرق دارد.
کدام شکلها ناسازگارند؟
شکلِ(۲،۳) با(۲،) در جمعِ عنصربهعنصر ناسازگار است: راستترین محور۳در برابرِ۲ قرار میگیرد و هیچکدام۱ نیستند. این خطا با برابربودنِ عددِ۲در محورِ چپ حل نمیشود. اگر مقصود افزودنِ مقدارِ جدا به هر سطر باشد، باید شکل و معنایِ ورودی را آگاهانه مشخص کنید؛ تغییرِ شکل صرفاً برایِ خاموشکردنِ خطا کافی نیست.
برنامه همچنین اندازهٔ bool و محورِ صفر را در قراردادِ محدودِ خودش رد میکند. ردِ محورِ صفر، قاعدهٔ عمومیِ NumPy نیست؛ این شبیهساز فقط محورهایِ صحیحِ مثبت را پوشش میدهد. سقفِ۲۵۶خانه هم انتخابِ آموزشی برایِ جلوگیری از خروجیِ بزرگ است، نه حدِ سرویس یا کتابخانه. پیش از تولیدِ خروجی، تعدادِ مقدارهایِ هر ورودی با حاصلضربِ شکل کنترل میشود.
چرا این محاسبه ضربِ ماتریسی نیست؟
در این مثال، هر خانه فقط جمعِ دو خانهٔ متناظرِ نگاشتشده است؛ هیچ جمعِ حاصلضرب رویِ محورِ میانی نداریم. ضربِ ماتریسی قراردادِ ابعادی و عملیاتِ دیگری دارد. شکلِ سازگار برایِ broadcasting بهتنهایی، سازگاریِ معناییِ ویژگی یا ترتیبِ کانال را ثابت نمیکند؛ جابهجاییِ محور میتواند خروجیِ بیخطا ولی غلط بسازد.
کدِ ما آرایهٔ خروجی را صریح میسازد؛ از آن دربارهٔ کپی، view، سرعت یا حافظهٔ NumPy نتیجه نمیگیریم. کتابخانه در این تمرین اجرا نشده است. اگر نیازِ شما پردازشِ ورودیِ یک پروژهٔ پاسخگویی است، شکل، نوع و معنایِ ورودی را در راهکارهایِ اپرا روشن کنید؛ این آموزش قالبِ داخلیِ محصول را وعده نمیدهد.
فایل تمرین و منبع
تطبیقِ شکل و نگاشتِ اندیسِ هر خانه؛ Python · دفترِ۲۴خانهای و دو مثالِ محورِ حذفشده/اسکالر
منابع در 2026-11-04 خوانده شدند؛ این تاریخ، تاریخ انتشار منبع نیست. مثالها و فایلهای این راهنما آموزشی و ساختهٔ تحریریهاند.