یک برنامهٔ پایتون بنویسید که یک فایل باینری شامل نمونه‌های 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 بهره ببرید.

توسط پژوهشگر در 202 روز قبل ساعت 03:00
دسته بندی ها: Python Python for beginner
sara در 202 روز قبل ساعت 07:47

برای کارایی، نگه‌داشتن مجموع فعلی پنجره و به‌روزرسانی آن با اضافه‌کردن مقدار ورودی جدید و کم‌کردن مقدار خروجیِ کهنه می‌تواند سرعت محاسبهٔ فیلتر را به‌شدت افزایش دهد. برای رفتارِ مرزی، تصمیم بگیرید که آیا از مرکزدار (centered) یا رویکرد causal استفاده می‌کنید و چگونه با مقادیر مرزی رفتار کنید (مثلاً با کپی مقادیر مرزی یا پد کردن). استفاده از memoryview در کنار bytearray می‌تواند از کپی‌های غیرضروری جلوگیری کند و پردازش بلوکی یا mmap به‌خصوص برای فایل‌های بزرگ مفید است. در نهایت مقدار میانگین را با // به عدد صحیح تبدیل کرده، با min/max به بازهٔ 0–255 محدود کنید و به خروجی bytearray اضافه و در یک فایل با open(..., 'wb') بنویسید.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری