یک برنامه پایتون بنویسید که دو آرایهی عددی را دریافت کند و (۱) جمع عنصر به عنصر را محاسبه کند و (۲) حاصلضرب اسکالر (dot product) آنها را هم با لیستهای پایتون و هم با آرایههای numpy محاسبه کرده و زمان اجرا را مقایسه کند.
3.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:32 0.0
برای حل این مسأله میتوانید ابتدا از لیستهای پایتون و لیست کامپرهنشن یا حلقه for برای محاسبهی جمع عنصر به عنصر و استفاده از sum(a*b for a,b in zip(...)) برای محاسبهی dot product بهره ببرید. سپس همان محاسبات را با numpy.array و عملگرهای برداری و numpy.dot انجام داده و با ماژول time یا timeit زمان اجرا را برای آرایههای بزرگ مقایسه کنید؛ نکتهها: برای دادههای بزرگ از numpy استفاده کنید چون عملیات برداری (vectorized) بسیار سریعتر از حلقههای پایتون است و از تبدیلهای اضافی داده خودداری کنید تا زمان اندازهگیری دقیقتر باشد.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای مقایسهی دقیق، هر دو آرایه را با همان طول و نوع داده بسازید و از اندازهگیری دقیق زمان با time.perf_counter استفاده کنید. برای لیستهای پایتون، تفاضل یا جمع عنصر به عنصر را با لیست کمپرِهنشن یا حلقهی for و نهایتاً با sum(a*b for a,b in zip(...)) انجام دهید و برای dot product هم از sum(a*b for a,b in zip(a_list,b_list)) استفاده کنید. در مقابل، با numpy از آرایههای numpy.array استفاده کنید و از عملیات برداری مثل a + b و a * b و np.dot یا a.dot(b) بهره ببرید. نکته: تفاوتهای قابل توجه در سرعت استفاده از بردارهای numpy به خاطر بهینهسازیهای داخلی و دستکاری حافظه است؛ برای اندازههای بزرگ داده، numpy چندین برابر سریعتر است و از تبدیلهای غیر ضروری داده پرهیز کنید. برای پایداری، چند بار اندازهگیری را تکرار کنید و از میانگین یا بهترین زمان استفاده کنید.
گزارش