اجرایِ یک تابع رویِ مقدارهایِ ذخیرهشدهٔ sparse همیشه با اجرایِ همان تابع رویِ تمامِ خانههایِ ماتریس برابر نیست. دو سؤال جدا داریم: تابع با صفرِ ضمنی چه میکند و رکوردهایِ تکراری پیش از تبدیل جمع شدهاند یا نه؟ در این تمرین، یک ماتریسِ ۳×۴ِ اصیل را با مربع و افزودنِ یک مقایسه میکنیم؛ SciPy نصب یا اجرا نشده است.
سه سطر، یک سطرِ خالی و یک خانهٔ تکراری
رکوردهایِ ما در سطرِ صفر، ستونِ ۱ دو مقدارِ ۳و۴ و در ستونِ ۳ یک صفرِ صریح دارند؛ سطرِ ۱ هیچ رکوردی ندارد و سطرِ ۲،ستونِ ۰ مقدارِ ۲ دارد. پس از جمعِ رکوردهایِ همخانه، نمایشِ متراکم [[۰،۷،۰،۰]،[۰،۰،۰،۰]،[۲،۰،۰،۰]] است. سطرها و ستونها صفرمبنا هستند.
قراردادِ CSRِ همین داده،dataِ[۳،۴،۰،۲]،indicesِ[۱،۱،۳،۰] وindptrِ[۰،۳،۳،۴] دارد. این نمایشِ آموزشی ورودیِ مرجع است؛ کد در این صفحه رکوردهایِ ساده و دیکشنریِ جمع را با کتابخانهٔاستاندارد اجرا میکند. از وجودِ این آرایهها اجرایِ متدِ SciPy نتیجه نمیشود.
مربعِ رکوردها با مربعِ خانه برابر نیست
اگر پیش از جمع،۳و۴ را جدا مربع کنیم و سپس به همان مقصد اضافه کنیم،۹+۱۶=۲۵ میگیریم. اما مقدارِ واقعیِ آن خانه۳+۴=۷ و مربعِ آن۴۹ است. در هر دو مسیر تابعِ مربع در صفر مقدارِ صفر دارد؛ پس شرطِ f(0)=0 بهتنهایی این خطایِ تکرار را حل نکرده است.
در مسیرِ اصلاحشده، ابتدا تمامِ رکوردهایِ هممختصات با قراردادِ جمع ادغام میشوند، سپس مربعِ هر خانه ساخته میشود. خروجی با مربعِ تکتکِ ۱۲خانهٔمتراکمِ مرجع دقیقاً برابر است. آرایهٔمبدأ پس از آزمایش نیز با snapshotِ اولیه مقایسه و حفظ شده است.
| ترتیبِ عملیات در خانهٔتکراری | محاسبه | نتیجه |
|---|---|---|
| تبدیلِ هر رکورد،سپس جمع | ۳²+۴² | ۲۵ |
| جمعِ رکورد،سپس تبدیلِ خانه | (۳+۴)² | ۴۹ |
| مرجعِ متراکم | ۷² | ۴۹ |
صفرِ ضمنی هم در محاسبه حضور دارد
تابعِ بعدیf(x)=x+1 است. اگر فقط سه رکوردِ ادغامشده را تغییر بدهیم، خانهٔ۷ به۸،صفرِ صریح به۱ و خانهٔ۲ به۳ میرسد. اما خانههایِ ذخیرهنشده همچنان در بازسازیِ آن مسیر صفر میمانند. در مقابل، اجرایِ واقعیِ+1 رویِ تمامِ ماتریس، هر صفرِ ضمنی را نیز۱میکند.
شاهدِ روشن، سطرِ خالیِ ۱ است: در مسیرِ فقطذخیرهشده [۰،۰،۰،۰] ودرمرجعِ تابعِ تمامِ خانهها [۱،۱،۱،۱] میشود. این اختلاف نه مقدارِ گمشده است و نه خطایِ تصادفی؛ در قراردادِ ما خانهٔذخیرهنشده صفرِ معلوم بود وf(0)=1 آن را تغییر داده است.
قالبِ canonical کدام ابهام را کم میکند؟
در مستنداتِ SciPy، محدودیتهایِ قالبِ canonical مانندِ نبودِ تکرار و مرتببودنِ شاخصها توضیح داده میشوند. در تمرینِ ما، ادغام با دیکشنری و مرتبسازیِ مختصات واقعاً انجام شده است. صفرِ صریح را عمداً نگه داشتهایم تا تفاوتِ«رکورد وجود دارد» و«خانه ناصفر است» دیده شود؛ حذفِ صفر مرحلهٔجداست.
هیچ تضمینِ عمومی برایِ هر تابع یا هر فرمت از این آزمایش درنمیآید. برای تابعی که صفر را عوض میکند، باید نمایش و سیاستِ خروجیِ همان ابزار را بررسی کنید. ساختنِ نسخهٔمتراکم در این کد فقط۱۲خانه دارد؛ آن را توصیهٔتبدیلِ دادهٔبزرگ به ماتریسِ کامل ننامیم. سرعت و حافظه هم اندازهگیری نشدهاند.
از ساختارِ ذخیره به معنایِ عملیات برسیم
راهنمایِ CSR مرزِ سطرها،صفرِ صریح و بازسازی را میسنجد؛ این صفحه اثرِ تبدیلِ غیرخطی و ترتیبِ ادغام را اجرا میکند. broadcasting نیز سازگاریِ شکل را روشن میکند؛ یک شکلِ درست دربارهٔمقدارِ ضمنی یا تکرارِ ذخیره چیزی را خودکار ثابت نمیکند.
برای ادامه به مبانی هوش مصنوعی بروید و پیش از تبدیل، سه مورد را بنویسید: معنایِ خانهٔذخیرهنشده،قاعدهٔرکوردِ تکراری وf(0). همهٔمحاسبههایِ این صفحه با Python۳٫۱۲٫۱۴ و دادهٔاصیلِ حافظهایاند؛ نه نمایشِ داخلیِ محصول اپرا،نه کیفیتِ مدل و نه کاراییِ SciPy را اعلام نمیکنند.
فایل تمرین و منبع
کد مستقلِ تمرینِ محدود · تمام خروجیِ واقعیِ همین تمرین؛ JSON
منابع در 2026-11-04 خوانده شدند؛ این تاریخ، تاریخ انتشار منبع نیست. مثالها و فایلهای این راهنما آموزشی و ساختهٔ تحریریهاند.