با استفاده از collections.namedtuple در پایتون یک ساختار Vector سه‌بعدی بسازید و توابعی برای محاسبه‌ی حاصل‌ضرب داخلی (dot product)، قدر (magnitude) و نرمال‌سازی آن بنویسید و سپس با استفاده از numpy نتایج را برای دو بردار نمونه نمایش دهید.

2.0 بازدید آخرین ویرایش در 220 روز قبل ساعت 01:55

0.0

ابتدا با collections.namedtuple یک کلاس ساده Vector با فیلدهای x، y و z تعریف کنید؛ توابع را طوری بنویسید که یک Vector را بگیرند و درون تابع به یک numpy.array تبدیل شده و از np.dot برای حاصل‌ضرب داخلی و np.linalg.norm برای محاسبه‌ی قدر استفاده شود؛ در نرمال‌سازی توجه کنید که از تقسیم بر صفر جلوگیری شود. برای کارایی (HPC/محاسبات عددی) از برداری‌سازی numpy استفاده کنید و در صورت نیاز داده‌ها را به آرایه‌های شکل‌دار (مثلاً (N,3)) تبدیل کنید تا از حلقه‌های پایتون اجتناب شود؛ در پروژه‌های بزرگ‌تر می‌توانید از numba یا آرایه‌های با dtype=float64 برای شتاب بیشتر بهره ببرید.

توسط پژوهشگر در 220 روز قبل ساعت 01:55
دسته بندی ها: Python Python for beginner
arash در 220 روز قبل ساعت 11:32

استفاده از collections.namedtuple برای تعریف Vector سه‌بعدی کار ساده‌ای است، اما در کارهای HPC بهینه‌گی ندارد؛ برای سرعت بیشتر می‌توانید مستقیماً از numpy.array استفاده کنید و ورودی‌ها را به آرایه‌های شکل‌دار (N,3) تبدیل کنید. در پیاده‌سازی توابع، بهتر است درونی‌سازی را به numpy محول کنید تا از np.dot و np.linalg.norm با داده‌های برداری بهره ببرید و برای تبدیل به float64 صریح عمل کنید. برای نرمال‌سازی، تقسیم بر صفر را به‌طور ایمن مدیریت کنید (اگر طول وکتور صفر است، خروجی را یا همان صفر در نظر بگیرید یا استثنا بدهید). در پروژه‌های بزرگ‌تر، با استفاده از numpy vectorization و یا numba می‌توانید سرعت را افزایش بدهید و از حلقه‌های پایتون خودداری کنید.

گزارش

1 پاسخ

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

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