یک برنامهٔ پایتون بنویسید که یک فایل باینری شامل نمونههای 8 بیتی (۰–۲۵۵) دادههای اندازهگیری را با استفاده از bytearray بخواند، یک فیلتر میانگین متحرک با پنجرهٔ n روی دادهها اعمال کند و خروجی صافشده را در یک فایل باینری جدید ذخیره کند.
8.0 بازدید آخرین ویرایش در 202 روز قبل ساعت 03:00 0.0
ابتدا فایل را در حالت باینری باز کرده و همهٔ بایتها را با bytearray(f.read()) بخوانید؛ از آنجا میتوانید با پیمایش روی ایندکسها، برای هر نمونه میانگین n نمونهٔ اطراف (مثلاً centered یا causal بسته به خواسته) را حساب کرده، مقدار میانگین را با // برای تبدیل به عدد صحیح و با min/max به بازهٔ 0–255 محدود کنید و در یک bytearray خروجی بنویسید. در نهایت خروجی را با open(..., "wb") بنویسید تا فایل جدید باینری ساخته شود. نکات: از bytearray بهخاطر قابلیت تغییر درجا و کار با بایتها استفاده کنید، برای کاهش هزینهٔ کپی میتوان از memoryview یا محاسبهٔ جمع پنجرهای (sliding window sum) استفاده کرد و برای پردازش فایلهای خیلی بزرگ به جای خواندن همهٔ فایل یکباره از پردازش بلوکی یا کتابخانههایی مثل numpy بهره ببرید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای کارایی، نگهداشتن مجموع فعلی پنجره و بهروزرسانی آن با اضافهکردن مقدار ورودی جدید و کمکردن مقدار خروجیِ کهنه میتواند سرعت محاسبهٔ فیلتر را بهشدت افزایش دهد. برای رفتارِ مرزی، تصمیم بگیرید که آیا از مرکزدار (centered) یا رویکرد causal استفاده میکنید و چگونه با مقادیر مرزی رفتار کنید (مثلاً با کپی مقادیر مرزی یا پد کردن). استفاده از memoryview در کنار bytearray میتواند از کپیهای غیرضروری جلوگیری کند و پردازش بلوکی یا mmap بهخصوص برای فایلهای بزرگ مفید است. در نهایت مقدار میانگین را با // به عدد صحیح تبدیل کرده، با min/max به بازهٔ 0–255 محدود کنید و به خروجی bytearray اضافه و در یک فایل با open(..., 'wb') بنویسید.
گزارش