अजगर बनाम फोरट्रान


17

कौन सा बेहतर है: फोरट्रान या पायथन? और मुझे लगता है कि दोनों मामलों में आपको Gnuplot की आवश्यकता है, क्या मैं सही हूं?

मैं इस समय विंडोज मशीन पर काम कर रहा हूं।

मैं इसका उपयोग भौतिकी-समस्याओं के संख्यात्मक समाधान प्राप्त करने के लिए करना चाहता हूं, जिसमें मोंटे-कार्लो सिमुलेशन, संख्यात्मक एकीकरण और भेदभाव, आणविक गतिशीलता आदि शामिल हैं।

मैंने कम्प्यूटेशनल भौतिकी पर एक कोर्स देखा, जो दोनों फोरट्रान (77 मेरा मानना ​​है) और पायथन का परिचय देता है। मैं एक के साथ शुरू करने और फिर दूसरे को सीखने की योजना बना रहा हूं, लेकिन मुझे नहीं पता कि कौन सा संक्रमण सबसे आसान हो सकता है।

आप कौन से कंपाइलर की सिफारिश करेंगे?

मेरे लिए मूल प्रश्न यह है कि कौन सा सीखने में सबसे आसान है, कौन सा सबसे तेज है, कौन सा सबसे अधिक उपयोगकर्ता के अनुकूल है और सबसे ऊपर जो सबसे अधिक उपयोग किया जाता है (इसलिए इन 4 की तुलना)? और इसके बाद, उपयोग में सबसे आम (मुफ्त या भुगतान) संकलक क्या हैं? वर्तमान में मैं एक पुराने लैपटॉप (प्रारंभिक इंटेल ड्यूल कोर) को लिनक्स में बदलने पर विचार कर रहा हूं; उम्मीद है कि यह काफी तेज है।

अब तक के जवाब के लिए बहुत बहुत धन्यवाद! जो उत्तर मैं देख रहा हूँ उसके अनुरूप हैं जो कि LKlevin और SAAD के हैं।

मुझे पता है कि सी + +, मेपल और मैं मास्टर MATLAB और Mathematica9 की मूल बातें लगभग पूरी तरह से अगर कोई मदद है।


12
आपको वास्तव में अधिक विशिष्ट होने की आवश्यकता है; यह पूछने जैसा है "जो बेहतर है: एक हथौड़ा या एक पेचकश?"। Scicomp.stackexchange.com/questions/11006 पर नज़र डालें (यह फोरट्रान के बजाय C ++ के बारे में है, लेकिन अधिकांश बिंदुओं को समान रूप से लागू होना चाहिए)।
क्रिश्चियन क्लैसन

@ क्रिसटन क्लैसन, निष्पक्ष बिंदु: पी
निक

अपने संपादन के लिए धन्यवाद, हालांकि यह वास्तव में चीजों को संकीर्ण नहीं करता है। मुझे यकीन नहीं है कि इससे अधिक क्या कहा जा सकता है जो पहले से ही ऊपर दिए गए प्रश्न के उत्तर के रूप में दिया गया है।
ईसाई क्लैसन

2
साथ ही, संकलक के बारे में प्रश्न एक अलग मुद्दा है और एक अलग प्रश्न होना चाहिए। (अन्यथा फ़ोर्ट्रान से परिचित लोग लेकिन पाइथन में दिलचस्पी नहीं है, इसे नहीं देखेंगे।) कुछ सिफारिशें पहले से ही scicomp.stackexchange.com/questions/8617 में दी गई हैं ।
क्रिश्चियन क्लैसन

1
यदि आप matlab को जानते हैं, तो आप उन्हें लागू करके अधिकांश संख्यात्मक एल्गोरिदम सीख सकते हैं, हालांकि आपका प्रदर्शन लगभग हमेशा matlab दिनचर्या में निर्मित से भी बदतर होगा। वहां से आप यह तय कर सकते हैं कि आपके प्रदर्शन की ज़रूरत क्या है और एक अधिक कुशल पुस्तकालय / भाषा में चले जाएं।
गोड्रिक सीर

जवाबों:


29

सीखने में आसानी

पायथन और फोरट्रान दोनों ही अपेक्षाकृत आसानी से सीखी जाने वाली भाषाएँ हैं। शायद अच्छे फोरट्रान सीखने की सामग्री की तुलना में अच्छा पायथन शिक्षण सामग्री ढूंढना आसान है क्योंकि पायथन का उपयोग अधिक व्यापक रूप से किया जाता है, और वर्तमान में संख्यात्मक कंप्यूटिंग के लिए फोरट्रान को "विशेषता" भाषा माना जाता है।

मेरा मानना ​​है कि पायथन से फोरट्रान तक संक्रमण आसान होगा। पायथन एक व्याख्या की गई भाषा है, इसलिए print("Hello, world!")फोरट्रान के लिए आपके पहले प्रोग्राम को चलाने के लिए जितने कदम चल रहे हैं, वह छोटा है (दुभाषिया खोलें, प्रॉम्प्ट पर टाइप करें ) ("हैलो वर्ल्ड" प्रोग्राम लिखें, संकलन करें, रन करें)। मुझे यह भी लगता है कि फोर्ट्रान की तुलना में पायथन में ऑब्जेक्ट-ओरिएंटेड स्टाइल सिखाने के लिए बेहतर सामग्री हैं, और फोर्ट्रन कोड की तुलना में गीथब पर अधिक पायथन कोड उपलब्ध है।

विंडोज पर उठना और चलना

अजगर को स्थापित करना कम दर्दनाक होना चाहिए; विंडोज वितरण उपलब्ध हैं। मैं एनाकोंडा या उत्साहित चंदवा जैसे वैज्ञानिक वितरण का उपयोग करने की सलाह देता हूं। वास्तव में एक संकलक नहीं है, प्रति से; दुभाषिया उस भूमिका को लेता है। आप एक CPython- आधारित दुभाषिया का उपयोग करना चाहते हैं, क्योंकि इसमें अधिक संख्यात्मक पुस्तकालय उपलब्ध हैं और यह C, C ++ और Fortran के साथ अच्छी तरह से जुड़ता है। अन्य दुभाषिया कार्यान्वयनों में ज्योन और पायपी शामिल हैं।

विंडोज मशीन पर, एक फोरट्रान कंपाइलर स्थापित करना कष्टप्रद होने वाला है। विशिष्ट कमांड-लाइन कंपाइलर गफ़रन, इफोर्ट (इंटेल से, व्यक्तिगत उपयोग के लिए नि: शुल्क है, अन्यथा पैसे खर्च होते हैं), और पीजीओफ़रन (पीजीआई से; नि: शुल्क परीक्षण संस्करण, अन्यथा पैसे खर्च होते हैं) जैसे कार्यक्रम हैं। इन संकलकों को स्थापित करने के लिए, आपको कुछ प्रकार की UNIX / POSIX- प्रकार संगतता परत स्थापित करने की आवश्यकता हो सकती है, जैसे कि Cygwin या GGW। मुझे इसके साथ काम करने में दर्द हुआ, लेकिन कुछ लोग उस वर्कफ़्लो को पसंद करते हैं। आप GUI के साथ एक संकलक भी स्थापित कर सकते हैं, जैसे दृश्य फोरट्रान (फिर, आपको लाइसेंस के लिए भुगतान करना होगा)।

लिनक्स पर, पायथन और संकलक स्थापित करना आसान होगा; मैं अब भी पायथन डिस्ट्रीब्यूशन के रूप में एनाकोंडा या एक्साइटेड कैनोपी स्थापित करूंगा।

गति: एक उत्पादकता बनाम प्रदर्शन व्यापार

पायथन (या MATLAB, गणितज्ञ, मेपल, या किसी भी व्याख्या की गई भाषा) का उपयोग करते हुए, आप उत्पादकता के लिए प्रदर्शन छोड़ देते हैं। फोरट्रान (या सी ++, सी, या किसी अन्य संकलित भाषा) की तुलना में, आप एक ही कार्य को पूरा करने के लिए कोड की कम पंक्तियाँ लिखेंगे, जिसका आम तौर पर मतलब है कि आपको काम करने का समाधान प्राप्त करने में कम समय लगेगा।

पायथन का उपयोग करने के लिए प्रभावी प्रदर्शन दंड भिन्न होता है, और संकलित भाषाओं को कम्प्यूटेशनल रूप से गहन कार्यों को सौंपने से कम किया जाता है। MATLAB कुछ ऐसा ही करता है। जब आप MATLAB में एक मैट्रिक्स गुणा करते हैं, तो यह BLAS कहता है; प्रदर्शन जुर्माना लगभग शून्य है, और आपको उच्च प्रदर्शन प्राप्त करने के लिए कोई फोरट्रान, सी या सी ++ नहीं लिखना था। इसी तरह की स्थिति पाइथन में मौजूद है। यदि आप पुस्तकालयों का उपयोग कर सकते हैं (उदाहरण के लिए, NumPy, SciPy, petsc4py, FEniCS से प्योल्फिन, PyClaw), तो आप पायथन में अपने सभी कोड लिख सकते हैं और अच्छा प्रदर्शन (शायद 40-40% का जुर्माना) प्राप्त कर सकते हैं क्योंकि सभी कम्प्यूटेशनल रूप से गहन भागों को तेजी से संकलित भाषा पुस्तकालयों के लिए कॉल किया जाता है। हालाँकि, यदि आप शुद्ध पायथन में सब कुछ लिखना चाहते हैं, तो प्रदर्शन दंड 100-1000x का कारक होगा। इसलिए यदि आप पायथन का उपयोग करना चाहते हैं और एक रिवाज को शामिल करना है, कम्प्यूटेशनल रूप से गहन दिनचर्या, आप उस भाग को C, C ++, या फोरट्रान जैसे संकलित भाषा में लिखना बेहतर होगा, फिर इसे पायथन इंटरफेस के साथ लपेटेंगे। ऐसे पुस्तकालय हैं जो इस प्रक्रिया को सुविधाजनक बनाते हैं (जैसे साइथन और f2py), और ट्यूटोरियल आपकी मदद करने के लिए; यह आमतौर पर नहीं होता है।

उपयोग की गुंजाइश

पाइथन को सामान्य प्रयोजन की भाषा के रूप में अधिक व्यापक रूप से उपयोग किया जाता है। फोरट्रान काफी हद तक संख्यात्मक और वैज्ञानिक कंप्यूटिंग तक सीमित है, और मुख्य रूप से उस डोमेन के उपयोगकर्ताओं के लिए C और C ++ के साथ प्रतिस्पर्धा कर रहा है।

कम्प्यूटेशनल विज्ञान में, पायथन आमतौर पर मेरे द्वारा उल्लिखित प्रदर्शन दंड के कारण सीधे संकलित भाषाओं के साथ प्रतिस्पर्धा नहीं करता है। आप उन मामलों के लिए पायथन का उपयोग करेंगे जहां आप उच्च उत्पादकता चाहते हैं और प्रदर्शन एक माध्यमिक विचार है, जैसे कि संख्यात्मक रूप से गहन एल्गोरिदम, डेटा प्रोसेसिंग और विज़ुअलाइज़ेशन को प्रोटोटाइप में। आप फोरट्रान (या अन्य संकलित भाषा) का उपयोग करेंगे, जब आपके पास अपने एल्गोरिथ्म और एप्लिकेशन डिज़ाइन का एक अच्छा विचार होगा, तो आप अपना कोड लिखने और डिबग करने में अधिक समय बिताने के लिए तैयार हैं, और प्रदर्शन सर्वोपरि है। (उदाहरण के लिए, प्रदर्शन आपके सिमुलेशन प्रक्रिया में एक सीमित कदम है, या यह आपके शोध में एक महत्वपूर्ण कार्य है।) एक सामान्य रणनीति पायथन और संकलित भाषा (आमतौर पर C या C ++, लेकिन फोरट्रान का भी उपयोग किया गया है) को मिलाना है। और केवल कोड के अधिकांश प्रदर्शन-संवेदनशील भागों के लिए संकलित भाषा का उपयोग करें; विकास लागत, ज़ाहिर है, कि एक कार्यक्रम को एक भाषा में एक कार्यक्रम की तुलना में दो भाषाओं में लिखना और डीबग करना कठिन है।

समानतावाद के संदर्भ में, वर्तमान एमपीआई मानक (एमपीआई -3) में देशी फोरट्रान और सी बाइंडिंग हैं। MPI-2 मानक में देशी C ++ बाइंडिंग थी, लेकिन MPI-3 में नहीं है, और आपको C बाइंडिंग का उपयोग करना होगा। तृतीय-पक्ष MPI बाइंडिंग मौजूद हैं, जैसे कि mpi4py। मैंने mpi4py का उपयोग किया है; यह अच्छी तरह से काम करता है, और उपयोग करने के लिए सीधा है। बड़े पैमाने पर समानता (हजारों कोर के दसियों) के लिए, आप शायद एक संकलित भाषा का उपयोग करना चाहते हैं, क्योंकि पायथन मॉड्यूल को गतिशील रूप से लोड करने जैसी चीजें आपको बड़े पैमाने पर गधे में काटेंगी यदि आप इसे भोले तरीके से करते हैं। उस अड़चन के आसपास आने के रास्ते हैं, जैसा कि पाइकॉव डेवलपर्स द्वारा दिखाया गया है, लेकिन इससे बचना सरल है।

व्यक्तिगत राय

मेरे पास लगभग एक दशक का अनुभव फोरट्रान 90/95 में है, और मैंने फोरट्रान 2003 में भी प्रोग्राम किया है। मेरे पास पायथन में लगभग पांच वर्षों का अनुभव है। मैं पायथन का उपयोग अधिक करता हूं जितना कि मैं फोरट्रान का उपयोग करता हूं क्योंकि, स्पष्ट रूप से, मैं पायथन में अधिक काम करता हूं। मेरे द्वारा किए जाने वाले अधिकांश कामों में प्रमुख सुपरकंप्यूटिंग संसाधनों की आवश्यकता नहीं होती है और आमतौर पर किसी अन्य भाषा में फिर से विकसित होने के लायक नहीं है, इसलिए पायथन ओडीई और पीडीई को हल करने के लिए ठीक है। यदि मुझे संकलित भाषा का उपयोग करने की आवश्यकता है, तो मैं उस क्रम में C, C ++, या फोरट्रान का उपयोग करूंगा।

अधिकांश फोरट्रान कोड जो मैंने देखे हैं, बदसूरत हैं, मुख्यतः क्योंकि अधिकांश कम्प्यूटेशनल विज्ञान समुदाय पिछले 30 वर्षों में सॉफ्टवेयर इंजीनियरों द्वारा खोजे गए किसी भी सर्वोत्तम अभ्यास से अनजान हैं या इसके विपरीत हैं। बुद्धि के लिए: फोरट्रान में कोई अच्छा इकाई परीक्षण ढांचा नहीं है। (सबसे अच्छा मैं आया था नासा द्वारा फ़ुनाइट, और यह अब भी कायम नहीं है।) कुछ अच्छे पायथन यूनिट टेस्टिंग फ्रेमवर्क, अच्छे पायथन डॉक्यूमेंट जेनरेटर और आमतौर पर अच्छी प्रोग्रामिंग प्रथाओं के कई बेहतर उदाहरण हैं।


बहुत अच्छा और पूरा जवाब :)। मैंने कल लिनक्स स्थापित किया है जहां अजगर-कंपाइलर पहले से मौजूद था। अब मैं सोच रहा था कि क्या मेरे लिनक्स और विंडोज मशीन के बीच फ़ाइलों को साझा करने का एक आसान तरीका है? मैंने देखा कि जब भी मैं डेटा को स्थानांतरित करने के लिए एक छड़ी का उपयोग करता हूं, तो विंडोज और लिनक्स मशीन दोनों डी स्टिच (जो एनएफटीएस-प्रारूप में स्वरूपित है) पर कुछ भागों की उपेक्षा करते हैं।
निक

और मेरा आखिरी अंक FAT32- प्रारूप (अब तक कम से कम) का उपयोग करके बीआईज हल किया गया है।
निक

NB: FAT32 का सीमित अधिकतम फ़ाइल आकार है।
मेवप्लप

@Meawoppl, क्या लिनक्स और विंडोज के बीच फ़ाइलों की अदला-बदली करने का एक और अधिक सुविधाजनक तरीका है? शायद ड्रॉपबॉक्स तब? क्या कोई हार्डवेयर-आधारित समाधान भी है?
निक

अपनी फ़ाइलों को 4GB के नीचे रखें: पी वास्तव में, मुझे एक अच्छे समाधान का पता नहीं है। फ़ाइल-नाम सम्मेलनों में भी कुछ खराबी है। मुझे याद है कि एक फ़ाइल का नामकरण करके कुछ विंडोज़ सपोर्ट को तोड़ने का काम <3.txt जिसने M $ का बहुत उदास चेहरा बना दिया। लिनक्स में एनटीएफएस का समर्थन अब बहुत अच्छा है, लेकिन ओएसएक्स में कुल मिलाकर नो-गो है। मैंने वास्तव में सोचा था कि हम अब तक इस समस्या को हल कर लेंगे।
मेवोप्लप

7

मैं फ़ोर्टन से दूर रहूँगा, या यदि आपको अवश्य ही एक नए संस्करण (2003 में 77 के बजाय) का उपयोग करना चाहिए। बहुत सारे भौतिकी सॉफ्टवेयर (विशेष रूप से मोंटे कार्लो सिमुलेशन) को फोरट्रान में लिखा गया है, सिर्फ इसलिए कि परियोजनाएं मूल रूप से 80 के दशक में शुरू हुई थीं।

कहा जा रहा है, अजगर और फोरट्रान दो बहुत अलग भाषा है, और उन्हें जो कुछ भी इस्तेमाल किया जाना चाहिए वह काफी अलग है। पायथन उच्च स्तर का है और सामान्य तौर पर वह तेज नहीं है (फोरट्रान और सी ++ की तुलना में)। इसका इतना अधिक उपयोग होने का कारण यह है कि यह अधिकांश चीजों के लिए काफी तेज है और आपके पास जो चीजें करना चाहते हैं उनमें से कई (लेकिन सभी नहीं) के लिए उत्कृष्ट (फोरट्रान संचालित) पुस्तकालय हैं। इसमें प्लॉटिंग के लिए उत्कृष्ट मैटप्लोटलिब भी है (इसलिए GNUplot की कोई आवश्यकता नहीं है) और आप महंगी बिट्स लिखने के लिए साइथन जैसे सामान का उपयोग करके काफी सभ्य प्रदर्शन प्राप्त कर सकते हैं। यह फोरट्रान या सी ++ के रूप में तेजी से नहीं होगा, और समानांतरकरण बहुत भयानक है, जिससे यह उच्च प्रदर्शन संख्यात्मक कंप्यूटिंग के लिए अपर्याप्त है। यदि आप चाहते हैं कि फोरट्रान या सी पुस्तकालयों को बुलाकर संभाला जा सकता है, लेकिन

फोरट्रान कुछ निचले स्तर की भाषा है। संख्या विज्ञान के लिए पुस्तकालय का समर्थन आश्चर्यजनक रूप से अच्छा है, लेकिन अभी भी बहुत कम स्तर है जो आपको उन बगों का ढेर दे सकता है जिनसे आप अन्यथा बच सकते हैं, जैसे गलती से गलत सरणी आकार को एक विधि से पारित करना। इन बगों को ढूंढना मुश्किल है और आप उन्हें बिल्कुल भी नोटिस नहीं कर सकते हैं। मेरा विश्वास करो, मैंने फोरट्रान 77 लिखते हुए काफी समय बिताया।

C ++ एक खुश माध्यम है। आर्मडिलो या ईजेन जैसे पुस्तकालयों के साथ, आप प्रदर्शन की निम्न स्तर की शैली प्राप्त करते हुए कोडिंग की एक उच्च स्तरीय शैली के साथ दूर हो सकते हैं।

प्रदर्शन की बात करें तो अभी न्यूक्लियर पाइथन का एकमात्र वास्तविक विकल्प CPython है। यदि आप कुछ इस तरह WinPython को डाउनलोड करते हैं, तो आपको अपनी जरूरत के अधिकांश पुस्तकालय भी मिल जाएंगे।

खिड़कियों पर फोरट्रान के लिए, चीजें थोड़ी कठिन हैं। मैं linux पर स्विच करने और gfortran या Intels ifort कंपाइलर का उपयोग करने की सलाह दूंगा। Ifort मेरे अनुभव में संख्यात्मक कोड के लिए तेज़ हो जाता है, लेकिन यह केवल गैर-वाणिज्यिक, गैर-शैक्षणिक उपयोग के लिए स्वतंत्र है।

योग करने के लिए: जब तक आप वास्तव में भारी सिमुलेशन चलाना चाहते हैं, तब तक अजगर आसान विकल्प है और साथ काम करने के लिए बहुत अधिक सुखद है। अधिकांश छात्र स्तर की परियोजनाओं के लिए भी यह काफी तेज होना चाहिए। यदि आपको बेहतर प्रदर्शन की आवश्यकता है, तो पहले से ही लिखे गए पुस्तकालयों की भारी मात्रा को देखकर शुरू करें और अपनी भाषा तय करें। यदि आपको खरोंच से चीजें लिखनी हैं, तो C ++ का उपयोग करें।

इसके अलावा एक चेतावनी: भौतिकविदों द्वारा लिखे गए अधिकांश कोड काफी भयानक हैं, शायद इसलिए क्योंकि भौतिकविदों में प्रोग्रामिंग को संभालने की प्रवृत्ति होती है और उन्हें उसी कठोरता की आवश्यकता नहीं होती है जो वे गणित में उपयोग कर सकते हैं। एक कक्षा लेने या एक पुस्तक खरीदने पर विचार करें जो प्रोग्रामिंग सिखाता है।

डिस्क्लेमर: मैं एक भौतिक विज्ञानी हूं, जिसने फोरट्रान 77 आधारित मोंटे कार्लो कोड के साथ काफी समय बिताया है और वर्तमान में वह पायथन में अपने सभी डेटा प्रोसेसिंग करता है।


समानांतरकरण के संबंध में, शोधकर्ताओं ने पायथन का उपयोग समानांतर रूप से अच्छे समानांतर दक्षता के साथ हजारों कोर पर सफलतापूर्वक किया है। (उदाहरण के लिए, PyClaw को शाहीन के सभी पर चलाया गया है, जो 65,000+ कोर है।)
ज्योफ ऑक्सीबेरी

1
वैसे यह संभव है, लेकिन मेरे ज्ञान से ही यह सुनिश्चित हो जाता है कि समानांतर हिस्सा सीपीथॉन के बाहर होता है जो एक काफी प्रयास है। उदाहरण के लिए, PyClaw (PETSc) के समानांतर भाग को C में लिखा गया है। एक और विकल्प सीपीथॉन के कई उदाहरण चल रहा है, लेकिन यह बिल्कुल तुच्छ नहीं है।
LKlevin

अधिकांश समानांतर अनुप्रयोग nontrivial हैं। आपने लिखा "[पायथन] समांतरता बहुत भयानक है, यह उच्च प्रदर्शन संख्यात्मक कंप्यूटिंग के लिए अपर्याप्त है।" शुद्ध पायथन में कोई भी उच्च प्रदर्शन कोड नहीं लिखता है। इस निर्णय के तर्क का समानता से कोई लेना-देना नहीं है, और उच्च प्रदर्शन कंप्यूटिंग में एक इंटरफ़ेस भाषा के रूप में पायथन के उपयोग को अमान्य नहीं करता है, जब तक कि इसे उचित रूप से उपयोग नहीं किया जाता है। आपका उद्धरण एक पुआल आदमी है जो समानता, उच्च प्रदर्शन, और व्याख्या की गई भाषाओं के मुद्दों का सामना करता है; कोई भी सक्षम उस तरह के एक आवेदन को डिजाइन नहीं करेगा।
ज्योफ ऑक्सीबेरी

मैं सहमत हूं कि पायथन लगभग किसी भी उद्देश्य के लिए एक उत्कृष्ट इंटरफ़ेस भाषा है, लेकिन यह सवाल से दूर जा रहा है। अधिकांश एप्लिकेशन nontrivial हैं, यहाँ समस्या यह है कि समानांतर के सभी मामले, जिसमें तुच्छ भी शामिल हैं, अजगर में गैर-तुच्छ हैं। यह एक उपद्रव हो सकता है यदि आपकी समस्या अन्यथा Numpy या Cython संचालन के संदर्भ में अच्छी तरह से वर्णित है। नहीं, आप 65000 कोर क्लस्टर पर इसका उपयोग नहीं करेंगे, लेकिन आप 2x कोर हिट को 100 कोर पर स्वीकार कर सकते हैं।
LKlevin

राइट समानतावाद, फोरट्रान के बारे में अच्छी बात यह है कि एमपीआई / ओपनएमपी के अलावा सह-सरणियां भी हैं जो अब मानक का हिस्सा हैं। जैसे, यह jolts.stanford.edu/72/…
stali

7

पायथन एक बहुत ही धीमी, उच्च स्तरीय भाषा है। तेज संख्या क्रंचिंग के लिए आपको मुख्य स्तर की गुठली को निम्न स्तर की भाषाओं जैसे C / C ++ में लिखना होगा, जिसका अर्थ है कि अब आपको एक नहीं बल्कि कम से कम दो भाषाओं को सीखना होगा। आपको डीबगिंग / इंस्टॉलेशन / रखरखाव आदि से जुड़े अतिरिक्त सिरदर्द से भी जूझना होगा। ज्यादातर लोग C / C ++ की छोटी-सी कमियों को छुपाने के लिए सिंटैक्टिक शुगर के रूप में पायथन का उपयोग करते हैं।

आधुनिक फोरट्रान (90 और बाद का) दोनों तेजी और उच्च स्तर के साथ लगभग MATLAB की तरह सिंटेक्स है। तो आप इस तरह की चीजें कर सकते हैं:

k=k+matmul(transpose(B),matmul(D,B))*weight(i)*detj

या

indx(:)=indxmap(indx(:),2)

या सरल भी

indx=indxmap(indx,2)

आदि।

लिनक्स पर कई सारे फ्री फोरट्रान कंपाइलर हैं। मैं उपयोग करता हूं

  1. जीसीसी
  2. सोलारिस स्टूडियो
  3. Open64
  4. इंटेल (केवल गैर-व्यावसायिक उपयोग)

मैं macs / OSX का उपयोग नहीं करता, लेकिन वहाँ मुक्त PGI है।

और कृपया फोरट्रान 77 का उपयोग न करें। नया कोड लिखने के लिए कोई भी इसका उपयोग नहीं करता है।

डिस्क्लेमर: मैंने व्यक्तिगत रूप से अपने छोटे असंरचित FE कोड (PETSc के ऊपर बनाया गया) को लिखने के लिए पायथन को देखा, लेकिन इसमें शामिल कार्य / कोडिंग की मात्रा सिर्फ सादे फोरट्रान 95 लिखने से अधिक थी।


1
इसमें मैं यह जोड़ना चाहूंगा कि आप फोरट्रान 2003 में काफी गंभीर वस्तु-उन्मुख प्रोग्रामिंग कर सकते हैं; उदाहरण के लिए इस गाइड को देखें । मैं इसे अपने कोड में बहुत उपयोग कर रहा हूं और यह बहुत प्रभावी है कि मैं क्या करना चाहता हूं। बहुत से लोग आपको इससे बचने के लिए कहेंगे - मेरा कहना है कि एक खुला दिमाग रखें, आप इसे बहुत पसंद कर सकते हैं। मैं निश्चित रूप से कर दूंगा।
डैनियल शेपरो

4

अजगर अच्छी तरह से प्रलेखित बहुमुखी पैकेज के साथ पूर्ण सिमुलेशन विश्लेषण के लिए बहुत व्यावहारिक है: ग्रिड पीढ़ी, सरणी संगणना और डेटा संरचना से निपटने ( संख्यात्मक और पांडा ) के साथ-साथ matplotlib के साथ डेटा विज़ुअलाइज़ेशन। बड़ी परिणाम फ़ाइलों के साथ जटिल सिमुलेशन के लिए, वीटीके पैकेज के साथ काम करना और भी बेहतर है जो डेटा को उन्नत ओपन-सोर्स एप्लिकेशन (जैसे कि पाराव्यू या विजिट) द्वारा पढ़ा जा सकता है।

फोरट्रान कुछ समय से सिमुलेशन में विभिन्न डोमेन के लिए पसंदीदा भाषा है। यह आसानी से पठनीय है (हालांकि पायथन कोड की तुलना में कम पठनीय)। एरे हैंडलिंग एक भाषा का मजबूत बिंदु है, सभी प्रकार के सरणी संचालन को परिभाषित करने और उपयोग करने में काफी आसान है। डिबगिंग भी जब काम आता है।

तुलना प्रदर्शन से नीचे हो जाती है : मैंने केवल संकलित भाषाओं (सी ++ और फोरट्रान 90) का उपयोग करके बड़े पैमाने पर गणना की है, लेकिन पायनियर के साथ कभी नहीं। एक और सूत्र व्याख्या और संकलित भाषाओं के बारे में अधिक प्रदर्शन की जानकारी देता है: कंप्यूटर प्रोग्रामिंग में स्नातक पाठ्यक्रम पढ़ाने के लिए मुझे किस भाषा का उपयोग करना चाहिए?

निजी तौर पर, मैं सामान्य रूप से पायथन के साथ काम करना पसंद करता हूं, खासकर पोस्ट-प्रोसेसिंग के लिए। पायथन प्रोग्रामिंग मजेदार है!


1
प्रदर्शन लगभग हमेशा महत्वपूर्ण होता है। प्रदर्शन पर ध्यान न देने के कारण लोगों को ईमेल की जांच करने और वेब सर्फ करने के लिए 16Gb रैम के साथ 8 कोर की आवश्यकता होती है।
stali

मुझे दूसरों के अजगर कोड को पढ़ने का दुर्भाग्य हुआ है। मैं पढ़ने के लिए आसान के रूप में पाई कोड वर्गीकृत नहीं होगा।
बिस्वजीत बनर्जी

@stali: मैं पूरी तरह सहमत हूँ
SAAD

1
@BiswajitBanerjee: किसी भी भाषा के साथ जटिल कोड लिखना असंभव नहीं है, लेकिन कम से कम मैं आसानी से किसी भी फ़ंक्शन के इनपुट और आउटपुट की पहचान कर सकता हूं, यहां जहां फोरट्रान भयानक हो जाता है! :)
SAAD

3

अजगर के साथ आपको Gnuplot की आवश्यकता नहीं है, आप उदाहरण के लिए, matplotlib और / या IPython शेल का उपयोग कर सकते हैं। IPython एक इंटरैक्टिव पायथन शेल है, जो% pylab मोड में, MATLAB में आपके द्वारा उपलब्ध कराए गए प्लॉटिंग कमांड को बहुत अधिक प्रदान करता है।

यह काफी संभावना है कि वैज्ञानिक गणना अगले 5+ वर्षों में MATLAB से अजगर तक एक बड़ी विस्तार पारी होगी।


Gnuplot का एक लाभ यह है कि यह लगभग हमेशा लिनक्स मशीनों (क्लस्टर / सर्वर आदि) पर स्थापित होता है और त्वरित / गंदे अर्थात के लिए बहुत उपयोगी होता है। यह vi के लिए vi जैसा है।
२४:००

1

मैं MATLAB का उपयोग करना जारी रखूंगा, यह तेज गणित पुस्तकालयों को बुलाता है, और आपको विंडोज़ पर फॉरट्रान पर स्विच करके प्रदर्शन में बहुत अंतर नहीं दिखेगा। उसी समय आपके पास परिणामों की रिपोर्टिंग और अपना कोड चलाने के लिए MATLAB में एक बेहतर बुनियादी ढांचा होगा। MATLAB का नकारात्मक पक्ष इसकी लागत है। फोरट्रान मूल रूप से स्वतंत्र है, और वहाँ से बाहर मुफ्त पुस्तकालयों का एक गुच्छा है।

FORTRAN को सीखना और प्रोग्रामिंग शुरू करना बहुत आसान है। यह मूल रूप से वही करता है जो नाम से पता चलता है: अपने फ़ार्मुलों का कोड में अनुवाद करता है, जिसे पढ़ना और समझना आसान है। इसलिए भौतिकविदों ने पुराने दिनों में इसका बहुत उपयोग किया। जब तक आपका अधिकांश कोड भौतिक विज्ञान की समस्याओं को हल करने (GUI का निर्माण नहीं करने या अन्य ठंडे सामान बनाने) के बारे में है, तब तक FORTRAN कोड को बनाए रखना आसान होगा।

यदि आप प्रोग्रामिंग का आनंद लेते हैं तो मैं केवल पायथन की सिफारिश करूंगा। इसके बारे में सोचें: जब आप भौतिकी की समस्या का समाधान देते हैं तो क्या आप समाधान के प्रोग्रामिंग हिस्से का आनंद लेते हैं? यदि आप करते हैं, तो पायथन एक विकल्प है, क्योंकि भाषा MATLAB की तुलना में बहुत बेहतर है।


2
MATLAB से फोरट्रान पर स्विच करने में प्रदर्शन अंतर के बारे में आपका कथन सामान्य रूप से सही नहीं है। फोरट्रान बहुत अच्छा है यदि आप कोड लिख रहे हैं जिसके लिए सरणियाँ एक स्वाभाविक रूप से अच्छी डेटा संरचना हैं, यदि आप इसके साथ रह सकते हैं कि यह I / O कैसे संभालता है, और यदि आपके पास इसकी आवश्यकता है तो लाइब्रेरी है। पायथन में न्यूमेरिकल लाइब्रेरी MATLAB के साथ कार्यक्षमता में बहुत अधिक ओवरलैप करती है, और मुझे पायथन इंटरफेस को C कोड से MATLAB इंटरफेस से लिखना आसान लगता है।
ज्योफ ऑक्सीबेरी

कभी-कभी आप करते हैं ज्यादा अंतर देखते हैं। मैंने हाल ही में फोरलेन 2008 (पैकेज bvp_solver आंतरिक रूप से) का उपयोग करके मैटलैब (आंतरिक रूप से पैकेज bvp6c का उपयोग करके) से एक भौतिकी सिमुलेशन कार्यक्रम को फिर से लिखा, और स्विच के बाद निष्पादन का समय केवल 1.4% तक कम हो गया, हालांकि मैंने एल्गोरिदम नहीं बदला। या कार्यक्रम की समग्र संरचना। एक ऐसे सिमुलेशन के लिए, जिसे प्रतिरूपित करने के लिए प्रति दिन ~ 3.5 दिनों की आवश्यकता होती है, यह एक बहुत ही उल्लेखनीय सुधार था।
जाबिराली
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.