با استفاده از برنامهنویسی تابعی در پایتون، یک اسکریپت بنویس که از یک لیست اعداد شناور، میانگین متحرک ساده (moving average) با طول پنجرهٔ n محاسبه و بهصورت لیست خروجی دهد (بدون استفاده از حلقه صریح for/while).
1.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:41 0.0
برای حل این مسئله میتوانید از توابع تابعی پایتون مثل map و lambda و همچنین از zip برای ساخت پنجرهها بهره ببرید؛ بهعنوان مثال پنجرهها را با zip(*(data[i:] for i in range(n))) تولید کرده و سپس با map و تابعی که sum(window)/n را محاسبه میکند میانگین هر پنجره را بگیرید. از ماژول itertools برای کارایی بهتر در دادههای بزرگ یا از functools.reduce در صورت تمایل استفاده کنید. نکات: اگر n len(data) خروجی را مناسب (مثل لیست خالی) برگردانید و با اعداد اعشاری کار کنید تا دقت حفظ شود.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
ساخت پنجرهها با zip(*(data[i:] for i in range(n))) ایدهٔ خوبی برای پیادهسازی تابعی است و خروجی را بهصورت لیست برمیگرداند. با این حال در دادههای بزرگ ممکن است مصرف حافظه بالا رود چون تمام پنجرهها همزمان ساخته میشوند. برای کاهش استفاده از حافظه میتوانید از رویکردی لیزیتر یا ترکیبی با itertools استفاده کنید تا پنجرهها را بهتدریج پردازش کند؛ همچنین گزینههای دیگری مثل numpy یا pandas وجود دارد که بهینهترند. اگر n بزرگتر از طول داده باشد، خروجی باید یک لیست خالی باشد و برای دقت باید از اعداد اعشاری استفاده کنید.
گزارش