یک برنامه پایتون بنویسید که دو آرایه‌ی عددی را دریافت کند و (۱) جمع عنصر به عنصر را محاسبه کند و (۲) حاصل‌ضرب اسکالر (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) بسیار سریع‌تر از حلقه‌های پایتون است و از تبدیل‌های اضافی داده خودداری کنید تا زمان اندازه‌گیری دقیق‌تر باشد.

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

برای مقایسه‌ی دقیق، هر دو آرایه را با همان طول و نوع داده بسازید و از اندازه‌گیری دقیق زمان با 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 چندین برابر سریع‌تر است و از تبدیل‌های غیر ضروری داده پرهیز کنید. برای پایداری، چند بار اندازه‌گیری را تکرار کنید و از میانگین یا بهترین زمان استفاده کنید.

گزارش

1 پاسخ

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

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