سی پلاس پلاس ++C یا پایتون Python

مقایسه ++C و پایتون

داشتم پروژه های نمونه Opnecv (شامل image stitching و image stitching detailed) برای تولید تصاویر پانوراما را تحلیل می کردم که به عنوان مثال درس بینایی ماشین در کلاس توضیح دهم. برای درک بیشتر، به دنبال مثالهایی با توضیحات کاملتر در وب بودم که در حین جستجو به پروژه ای رسیدم که با پایتون نوشته شده بود و خیلی خوب تمام بخشهایش توضیح داده شده بود. این شد که پایتون را به ویژوال استودیو اضافه کرده و پروژه مذکور را را کامپایل و اجرا کردم. دیدم با وجود اینکه این برنامه از نسخه باینری کتابخانه OpenCV استفاده می کند، زمان اجرا خیلی کند است. بررسی کردم دیدم مشکل سر یک تابعی هست که دو حلقه for تو در تو دارد. برای مقایسه با ++C تصمیم گرفتم کد را به ++C بنویسم و این شد که پایتون را یاد گرفتم و طی چند ساعتی، کد را به ++C تبدیل کردم.

مقایسه زمان اجرای برنامه در پایتون و ++C

نتیجه مقایسه جالب بود. غیر از حلقه for بقیه بخشها از نظر زمانی تقریبا یکسان بود چرا که هر دو از کتابخانه OpenCV استفاده می کردند که اصالتا کد ++C است. اما در حلقه for کد ++C نزدیک به ۱۰ برابر سریعتر از پایتون اجرا می شود. زمانها را ببینید:
مقایسه سی پلاس پلاس و پایتون

​زمان اجرای کد سی پلاس پلاس ۱٫۲۵ ثانیه و زمان اجرای کد پایتون ۱۰٫۴۷ ثانیه بود.
از این زمانها در پایتون حدود ۱٫۵ ثانیه مربوط به توابع داخلی OpenCV بوده و ۹ ثانیه مربوط به حلقه for تو در تو است که روی کل تصویر جاروب می شود.

در C++ کل زمان تقریبا مربوط به توابع داخلی OpenCV بوده و حلقه for تودرتو تنها ۰٫۰۰۲ ثانیه زمان برد.

لذا در کل برنامه، ++C حدود ۱۰ برابر سریعتر بوده و در حلقه for تفاوت سرعت وحشتناک است: ۹ ثانیه به ۰٫۰۰۲ ثانیه می شود ۴۵۰۰ برابر سرعت بهتر ++C نسبت به زبان اسکریپتی پایتون.

نتیجه مقایسه ++C و پایتون

پایتون بسیار ساده تر از ++C است. لذا اگر برنامه نویس حرفه ای ++C هستید در کمتر از یک روز پایتون را یاد می گیرید. سرعت کد نویسی پایتون به دلیل برخورداری از امکانات فراوان، که الان جای بحثش نیست، زیاد است. اما دو مشکل دارد: یکی اسکریپتی بودن و اجرای خط به خط که همیشه نیازمند این هستید که پایتون (همان ورژنی که شما استفاده کرده اید) در کامپیوتر مقصد نصب باشد. دوم سرعت کم در حلقه ها و دستورات شرطی.

لذا برای کاربردهایی که پردازشهای سنگین و حلقه های زیاد ندارید استفاده از پایتون خوب است. برای کارهای پردازشی یا باید سراغ ++C بروید یا اینکه اگر اصرار به استفاده از پایتون دارید، بخشهای پردازشی کد را حتما از نسخه های باینری کتابخانه های ثالث استفاده کنید.

 

Share

هدف زندگی – ۲

در ادامه پست قبلی در مورد هدف زندگی نظرسنجی دیگری گذاشتم مبنی بر اینکه فکر می کنید، هدف از خلقت انسان چیست؟ و ۹۳ نفر در آن شرکت کردند که نتیجه آن به شرح زیر است:
هدف از زندگیدر این مجال، این تحلیل مختصری بر این نظرسنجی ارائه می کنم:
✅در مورد هدف زندگی ابتدا باید مشخص کنیم که آیا #خدا هست یا نیست. البته این موضوع بحث مفصلی است و فرض ما بر این است که همه شما به حضور خدا اعتقاد دارید.
استیون هاوکینگ، فیزیکدان مشهور، در سالهای گذشته اعلام کرده بود که خدا نیست و جهان هستی بر اثر پدیده #انفجار بزرگ یا بیگ بنگ به وجود آمده است و قانون #جاذبه، جهان را اداره می کند. البته ایشان نیفزودند که خود این پدیده انفجار بزرگ را چه کسی به وجود آورد؟ اگر بپذیریم که بیگ بنگ سبب تشکیل جهان هستی شده است، باید از #مسبب آن هم بپرسیم که باز به خدا می‌رسیم (سوره انبیاء آیه ۳۰).
جالب اینکه امسال خود جناب استیون هاوکینگ هم نظرش عوض شده و وجود خدا را پذیرفته است.
از طرفی در زمان فعلی تقریباً هیچ دین بزرگ و متوسطی نداریم که به حضور خدا اعتقاد نداشته باشد و به ادعای ویکی پدیا، تنها ۷% جمعیت جهان به خدا اعتقاد ندارند که حدود نصف آنها هم چینی اند!
لذا فرض را بر این می گیریم که همه شما قبول دارید خدا هست.
✅ اما در مورد هدف زندگی، سه نفر از دوستان پاسخ دادند که زندگی پوچ است و بعد از مرگ #نابود می شویم. خوب این فلسفه، با حکمت خداوند ناسازگار است چرا که شخص حکیم کار بیهوده نمی‌کند. با عدل خدا هم ناسازگار است چراکه انسان ها در طول ۶۰-۷۰ سالی که در زمین زندگی میکنند، به پاداش و سزای کردار نیک و بد خود نمی‌رسند…
از اینها که بگذریم، آیا برای شما پیش نیامده است که #مرده را به #خواب ببینید؟ خوب اگر انسان با مرگ نابود می‌شود چگونه پس از مرگ در خواب دیگران ظاهر می شود و به او القائاتی می‌کند و گاهی او را از برخی اخبار #غیب آگاه می‌کند؟
چطور انسان با مرگ نابود می شود حال آنکه اخبار زنده کردن مردگان توسط حضرت #عیسی به تواتر رسیده است!
چطور انسان با مرگ نابود می شود حال آنکه اخبار متعددی از #شفای مریض ها توسط امامان در زمان خودمان دیده و شنیده ایم؟ امامانی که صدها سال قبل شهید شده اند…
اگر دوستانی هستند که تمایل به گفتگو در این مورد دارند می توانند به حاج آقای حسینی دفتر نهاد مراجعه کنند. من هم به اندازه بضاعتم در خدمت هستم.
پنج نفر از دوستان اعلام کردند که هدف از زندگی رسیدن به #لذّت بیشتر است. این هدف، به چند دلیل نمی‌تواند مورد نظر خدا باشد:

🔅 اگر هدف خلقت #انسان، رسیدن به بهره مندی های بیشتر بود، حضور حیوانات کفایت می کرد و نیازی به خلقت انسان با این خصوصیات نبود. در واقع تنها #تمایز انسان با #حیوان در جنبه های غیر مادی است: قدرت #تفکر، #تعقل و #رشد در جنبه های معنوی
🔅نکته دیگر اینکه، رسیدن به برخی لذّت ها، مستلزم #نقض لذّت دیگران است؛ مثلاً فردی از سیگار کشیدن لذت می‌برد در حالیکه فرد کنار او از این کار اذیت می‌شود. یا فردی از گوش دادن به #موسیقی بلند لذت می‌برد در حالی که این کار باعث آزار همسایه‌اش در آپارتمان می‌شود. به عبارتی نمی‌شود همه از لذت حداکثری بهره‌مند شوند.
🔅نکته آخر اینکه هیچ لذتی در این دنیا #مطلق نیست! تقریباً هر لذتی را نگاه کنید همراه با نوعی درد و اذیت شدن است؛ مثلاً لذتِ خوردن با اذیتِ رفتن به دستشویی همراه است! یا لذتِ خواب با رنجِ بیدار شدن همراه است، لذتِ سُر خوردن از سرسره، با زحمت بالا رفتن از پله ها همراه است… پس رسیدن به این هدف در این دنیا مقدور نیست

✅سه دسته از دوستان که خوشبختانه ۹۱% افراد شرکت کننده در نظرسنجی هستند یکی از سه هدف (رسیدن به کمال عقلی و معرفتی، شناخت خدا و بندگی او، رسیدن به شهود باطنی) را انتخاب کرده اند که اینها می توانند با هم جمع شوند؛ یعنی در حالت ایده آل ما می خواهیم که عقل و معرفتمان زیاد شود به تبع آن خدا را بهتر خواهیم شناخت و آنکس که خدا را بشناسد او را عبادت خواهد کرد و تا آنجا می رود که به #یقین برسد و یقین همان #شهود باطنی است که کمترین چیزی است که در بین مردم تقسیم شده است.
برای این دسته از دوستان و نیز آن دو دسته‌ی اول، پیشنهاد می کنم ۲۵ صفحه اول کتاب زیر از استاد مطهری را مطالعه کنند: این کتاب از سخنرانیهای ایشان در جمع ۱۰ تن از شاگردان خودشان در سال ۱۳۵۱ تهیه شده است:

https://t.me/khosravi_h/637

مطالب مشابه

Share

هدف زندگی

چندی پیش، نظرسنجی در کانالم گذاشتم و از دانشجویان خواستم به این سوال پاسخ دهند که آیا به فلسفه زندگی شان فکر می کنند؟
purpose-of-life - هدف زندگیدر این مجال می خواهم تحلیل مختصری کنم و پیشنهادی بدهم که ان شاءالله مفید باشد:
خیلی خوشحال کننده است که دانشجویان عزیز به هدف زندگی و فلسفه حیات خود فکر می کنند (به جز ۳% که ان شاءالله آنها هم فکر کنند!).
کلمه انسان از ریشه نسیان گرفته شده یعنی #فراموشی و به همین علت اکثر انسانها (مخصوصا بعد از اشتغال و ورود به زندگی متاهلی) گرفتار روزمرگی شده و از هدف خلقت غافل می شوند😐. تمام همّ و غمشان این می شود که امروز که از خانه بیرون می روم چه کاری کنم که پول 💵 بیشتری کسب کنم. در خانه هم که مهمترین سوال این می‌شود که ناهار و شام چی بخورم و چه کانالی را تماشا کنم! اصولا در طول روز به اندازه ۵ دقیقه هم به خودمان فرصت خلوت کردن و تفکر کردن نمی دهیم.الان که شما در سنی هستید که عقل و قلبتان به دنبال حقیقت است، باید این را قدر بدانید و قبل از اینکه به مرحله روزمرگی بیفتید فکر کنید و تحقیق کنید که واقعا هدف خداوند از خلقت انسان چیست؟یادم هست در دوره دانشجویی کتابی 📚 مطالعه کردم به نام “در آغوش نور” که ترجمه Embraced By The Light بود. نویسنده این کتاب یک خانم مسیحی (بتی جین ادی) است و شخصی است که چند ساعتی مرگ را تجربه کرده و همین تجربیات را در قالب چند جلد کتاب درآورده که اولین جلد آن بسیار جذاب است.

این کتاب را به تازگی دوباره از روی نسخه صوتی گوش دادم. نوشته های این کتاب خالی از اشکال نیست ولی نگاه 👀 شما به زندگی را عوض می کند. (برخی اشکالات: در جایی که صحبت از عاقبت منکرین خدا می کند و تحلیل خودش را ارائه می کند یا در بخشی که قصه مرد مست و ژنده پوشی که در کنار خیابان افتاده را بیان می کند، با عقل و آموزه های اسلام جور در نمی آید). کلا خوب است در قبال هر متنی که می خوانیم یا ویدیویی که می بینیم تفکر انتقادی داشته باشیم!

🍃🍃🍃🍃🍃🍃🍃

این کتاب ۱۶۵ صفحه است و نسخه صوتی 🎧 آن هم موجود است که می توانید از برنامه اندرویدی نوار (نسخه صوتی) یا فیدیبو (نسخه متنی) آن را دریافت کرده و بخوانید.

@khosravi_h

مطالب مشابه

Share

جایگزین MATLAB با حجم کم

متلب، از مهمترین نرم افزارهای مهندسی است که فرایند تحقیق و توسعه را تسریع می کند. لیکن دو مشکل بزرگ دارد، یکی اینکه رایگان نیست و دوم اینکه حجم آن خیلی زیاد است و بیش از ۱۰ گیگابایت هنگام نصب فضا اشغال می کند.
سه نرم افزار متن باز جایگزین برای متلب وجود دارد که در این آدرس معرفی شده اند. نرم افزارهای GNU Octave، Scilab و Sage که بهترین آنها GNU Octave است با حجمی حدود ۲۰۰ مگابایت. نکته جالب این نرم افزار سازگاری تقریبا کامل آن با متلب است؛ یعنی دستورات آن مشابه دستورات متلب است و شما می توانید حتی پروژه هایی که با متلب نوشته اید را در اکتاو استفاده کنید.
برای افرادی که از مشکل حجم حافظه رنج می برند، اکتاو پیشنهاد خوبیست. توضیحات بیشتر در مورد اکتاو را در ویکی پدیا (گنو اکتاو) بخوانید.
Octave-4.0.0 - گنو اکتاو - اکتیو جایگزین متلب

مطالب مشابه

Share

آموزش نصب OpenCV

کتابخانه ی OpenCV (مخفف Open Computer Vision) از پرکاربردترین کتابخانه ها برای پردازش تصویر، بینایی استریو و یادگیری ماشینی است. در این کتابخانه ماژولهای متعددی از کار با تصاویر و ویدیو گرفته تا انواع طبقه بندهای هوشمند مثل شبکه عصبی و SVM وجود دارد و باتوجه به نوع توسعه آن که با همکاری برنامه نویسان از سراسر جهان اتفاق می افتد، روز به روز امکانات تازه ای به آن اضافه می شود.

این کتابخانه برای اکثر سیستم عاملها مثل ویندوز، لینوکس و اندروید در دسترس است. با توجه به اینکه OpenCV نسخه نصبی ندارد، غالبا برنامه نویسان در ابتدای کار، به مشکل می خورند. در آموزش زیر، طی چند گام، فرایند نصب یا پیکربندی OpenCV به منظور استفاده در ویژوال سی را توضیح میدهم.

نحوه پیکربندی OpenCV برای استفاده در Visual Studio

  1. دانلود نسخه مورد نظر از بخش دانلود OpenCV - اپن سی ویOpenCV
    • لازم به ذکر است که از سال گذشته نسخه ۳٫۰ این کتابخانه آماده شده و همزمان با نسخه های ۲٫۴ در حال توسعه است، اما برخی توابع و ماژولها (مثل SIFT و SURF) متاسفانه هنوز در این نسخه گنجانده نشده است و بسیاری از ماژولها (مثل ماژول یادگیری ماشین cv::ml) هم تغییرات عجیبی کرده اند و کدهای قبلی باید تغییرات زیادی برای سازگاری انجام دهند. ضمن اینکه این نسخه بعضا باگهایی هم دارد که شاید بهتر باشد لااقل تا به روز رسانی عمده بعدی به نسخه ۳٫۲ صبر کنید.
    • در هر صورت اگر نسخه ۳٫۱ را بخواهید به این آدرس و اگر نسخه ۲٫۴٫۱۳ را بخواهید به این آدرس مراجعه کنید (معمولا اجازه دسترسی از ایران نداریم و باید با فیل.تر شک.ن وصل شوید)
  2. بازگشایی فایلها در یک مسیر مناسب مثلا C:\OpenCV
    • دقت کنید که فایلی که دانلود کرده اید یک فایل زیپ است و نه فایل نصبی، لذا باید آن را در جای مناسبی که حداقل یک گیگابایت فضا داشته باشد، Extract کنید.
  3. پیکربندی متغیرهای محیطی ویندوز
    • برای اینکه ناچار نباشیم فایلهای dll مرتبط با OpenCV را هر بار کنار پروژه مان کپی کنیم، کافیست یک بار مسیر این فایلها را به PATH ویندوز اضافه کنیم. برای این منظور دکمه Win+PauseBreak را فشار دهید یا روی My Computer کلیک راست کرده و Properties را انتخاب کنید. سپس روی دکمه Advanced System Settings کلیک کرده و در پنجره جدید، گزینه Environment Variables را انتخاب کنید:My Computer Properties ادامه خواندن Continue reading
Share