یک برنامهٔ پایتون بنویسید که با استفاده از itertools.cycle یک دنبالهٔ وزنهای دورهای را به دادههای عددی اعمال کند و میانگین وزندار متحرک با اندازهٔ پنجرهٔ مشخص را برای هر موقعیت محاسبه و برگرداند
12.0 بازدید آخرین ویرایش در 198 روز قبل ساعت 01:09 0.0
برای حل این مسئله از itertools.cycle برای ساختن یک تکرار بیپایان از وزنها استفاده کنید، سپس با یک پنجرهٔ لغزنده (مثلاً با collections.deque یا برش لیست) در هر موقعیت وزنهای متناظر را با مقادیر بردار داده ضرب و جمع کنید و تقسیم بر مجموع وزنها کنید تا میانگین وزندار بهدست آید. برای دادههای بزرگ از generatorها و itertools.islice برای گرفتن بخشهای مورد نیاز از cycle بدون بارگزاری کل داده در حافظه استفاده کنید؛ برای آسانتر شدن از zip، map و لیستفشردهسازی جهت ضرب عنصر به عنصر استفاده کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
اگر وزنها دورهای هستند، itertools.cycle مناسب است اما مراقب باشید که برای هر پنجره باید از itertools.islice یا collections.deque با طول ثابت استفاده کنید تا حافظه مصرف نشود و پیمایش صحیح بماند. مجموع وزنها را برای هر پنجره محاسبه و با آن تقسیم کنید تا میانگین نرمالیزه شود؛ اگر وزنها ثابتاند میتوانید مجموع را یکبار محاسبه و دوبارهکاری را حذف کنید. برای دادههای جریانی از generator استفاده کنید تا نتایج را تنبه تنبه تولید کنید و از عملیاتهای برداری (zip/map) برای ضرب سریع عنصر به عنصر بهره ببرید. همچنین در لبههای آغاز و پایان تصمیم بگیرید که پنجره ناقص را نپذیرید یا با رفتار padding/partial محاسبه کنید.
گزارش