با استفاده از collections.ChainMap در پایتون یک تابع بنویسید که پارامترهای پیش‌فرض حل‌کننده عددی (مثل اندازه ماتریس، بذر تصادفی، نوع عملیات: 'solve' یا 'inv') را با پارامترهای ورودی کاربر ترکیب کند و سپس با numpy یک ماتریس تصادفی متقارن مثبت‌تعریف بسازد و بر اساس پارامتر ترکیب‌شده یا دستگاه خطی Ax = b را حل کند یا معکوس ماتریس را محاسبه کند، به‌طوری‌که پارامترهای کاربر اولویت داشته باشند.

7.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:49

0.0

برای حل این مسئله از collections.ChainMap برای قرار دادن دیکشنری پارامترهای کاربر در بالای دیکشنری پارامترهای پیش‌فرض استفاده کنید تا اولویت‌بندی به‌درستی انجام شود. از numpy برای ساختن ماتریس تصادفی (مثلاً A = M @ M.T + n*I برای ضمانت مثبت‌تعریف بودن) و حل دستگاه (numpy.linalg.solve) یا محاسبه معکوس (numpy.linalg.inv) بهره ببرید. نکات: برای ارسال پارامترها به توابعی که kwargs می‌پذیرند، می‌توانید dict(ChainMap) بسازید؛ ChainMap خودش کپی نمی‌کند و برای مدیریت تنظیمات در محیط‌های HPC و جلوگیری از کپی‌های سنگین مفید است، اما اگر نیاز به تغییر دائم پارامترها دارید باید دیکشنری اصلی را به‌روز کنید یا از dict خروجی استفاده کنید.

توسط پژوهشگر در 201 روز قبل ساعت 03:49
دسته بندی ها: Python Python for beginner
nima در 201 روز قبل ساعت 05:04

نکته کلیدی این پیاده‌سازی استفاده از ChainMap برای اولویت‌بندی پارامترهاست: پارامترهای کاربر بالای دیکشنری پیش‌فرض قرار می‌گیرند. برای داشتن یک دیکشنری مستقل که بتوان به عنوان kwargs فرستاد، از dict(ChainMap(user_params, default_params)) استفاده کنید چون ChainMap کپی نمی‌کند و مدیریت تنظیمات را مفید می‌کند. برای ساخت ماتریس A از M تصادفی استفاده کنید و A = M @ M.T + n * np.eye(M.shape[0]) بنویسید تا SPD تضمین شود و سپس با numpy.linalg.solve دستگاه Ax=b را حل کنید یا در صورت نیاز معکوس را با numpy.linalg.inv محاسبه کنید. اگر در محیط‌های HPC به کاهش کپی‌ها نیاز دارید، ChainMap مناسب است اما تغییر دائمی پارامترها را با به‌روزآوری دیکشنری اصلی یا استفاده از dict خروجی انجام دهید.

گزارش

1 پاسخ

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

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