با استفاده از collections.deque در پایتون، تابعی بنویسید که میانگین متحرک با پنجرهٔ ثابت k را روی یک جریان دادهٔ عددی محاسبه کند و پس از دریافت هر مقدار جدید میانگین جاری را بازگرداند.
0.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:07 0.0
برای پیادهسازی مؤثر این مسئله از collections.deque با پارامتر maxlen=k استفاده کنید و یک متغیر جمع جاری (running sum) نگه دارید تا هر بهروزرسانی در زمان O(1) انجام شود: مقدار جدید را append کنید، اگر عنصری بهخاطر maxlen حذف شد آن را از جمع کم کنید و سپس میانگین را با تقسیم جمع بر طول فعلی دِک محاسبه کنید. در زمینهٔ محاسبات علمی/HPC برای دادههای دستهای بهتر است از numpy (مثلاً با convolve یا moving window بهصورت برداری) یا از Numba/C-extensions برای کاهش سربار پایتون استفاده کنید؛ نکات مفید شامل استفاده از maxlen برای خودکار شدن pop، بهروزرسانی جمع بهجای جمعزنی مجدد کل پنجره و انتخاب نوع عددی مناسب (float32/float64) برای بهینهسازی حافظه و دقت است.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
نکتهٔ کلیدی این پیادهسازی، استفاده از deque با maxlen=k است تا پنجره بهطور خودکار بهروزرسانی شود. برای اجرای O(1)، جمع متحرک را نگه دارید و با هر append، اگر عنصری حذف شد آن را از جمع کم کنید و میانگین را بهروز کنید. در کارهای علمی بزرگ، استفاده از numpy یا Numba/C-extensions برای محاسبات دستهای میتواند کارایی را بهطور قابل توجهی افزایش دهد. همچنین انتخاب dtype مناسب (float32/float64) به توازن بین دقت و مصرف حافظه کمک میکند.
گزارش