मतलाब बनाम जूलिया बनाम। अजगर

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

हालांकि, वैज्ञानिक कंप्यूटिंग में अजगर की वृद्धि को नजरअंदाज करना असंभव है। मैथवर्क्स को उसी तरह महसूस करना चाहिए: उन्होंने न केवल MATLAB से अजगर को सीधे कॉल करने की क्षमता को जोड़ा, बल्कि इसकी कुछ भाषा विशेषताओं को भी उधार लिया, जैसे कि बाइनरी ऑपरेटर घटकों के लिए अधिक आक्रामक स्थानांतरण

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

EDISON सॉफ्टवेयर - वेब-विकास
यह लेख EDISON सॉफ़्टवेयर के समर्थन से अनुवादित किया गया था, जो प्रोग्रामर और उनके नाश्ते के स्वास्थ्य का ख्याल रखता है , और कस्टम सॉफ़्टवेयर भी विकसित करता है

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

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

यदि हम लागत से संबंधित मुद्दों को छोड़ देते हैं, तो इन भाषाओं में कई अंतरों का कारण उनकी उत्पत्ति से संबंधित है। MATLAB ने पहले गणितीय पहलू, अर्थात् कम्प्यूटेशनल गणित पर प्राथमिकता दी। 1980 के दशक में दिखाई देने वाले पायथन ने कंप्यूटर विज्ञान को सबसे आगे रखा। 2009 में स्थापित, जूलिया ने दो पिछली भाषाओं के बीच संतुलन हासिल करने का लक्ष्य निर्धारित किया है।

MATLAB


प्रारंभ में, MATLAB में प्रत्येक मान डबल-सटीक फ़्लोटिंग-पॉइंट संख्याओं की एक सरणी था। इस पसंद के दोनों पहलुओं, सरणियों और फ्लोटिंग-पॉइंट संख्या, डिजाइन निर्णयों से प्रेरित थे।

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

Arrays महत्वपूर्ण हैं क्योंकि रैखिक बीजगणित में संख्यात्मक एल्गोरिदम ने अपने स्वयं के रूपों LINPACK और EISPACK को लिया । लेकिन उन्हें वैज्ञानिक कंप्यूटिंग में एक मानक माध्यम के साथ एक्सेस करना, फोरट्रान 77, एक बहु-चरण प्रक्रिया थी जिसमें चर घोषित करना, रूटीन के छिपे हुए नामों को शामिल करना, कोड संकलित करना और फिर डेटा और आउटपुट फ़ाइलों का विश्लेषण करना शामिल था। A * B के रूप में मैट्रिक्स गुणा को रिकॉर्ड करना और तुरंत प्रतिक्रिया को सूचीबद्ध करना खेल के पाठ्यक्रम में बदलाव का कारण बना।

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

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

प्रतिक्रिया में, MathWorks MATLAB में नए-नए प्रयोग करते रहे: बिल्ट-इन फ़ंक्शंस, नेस्टेड फ़ंक्शंस, अनुगामी चर, कई डेटा प्रकार, ऑब्जेक्ट-ओरिएंटेड फ़ंक्शंस, यूनिट टेस्टिंग इन्फ्रास्ट्रक्चर, और इसी तरह। प्रत्येक नवाचार शायद एक महत्वपूर्ण समस्या का समाधान था। लेकिन इन परिवर्तनों के 40 वर्षों के संचय का अवधारणा की सादगी और एकता को धुंधला करने का एक पक्ष प्रभाव था। 2009 में, मैंने एक पुस्तक लिखी जिसमें 100 पृष्ठों से कम पर MATLAB की मूल बातें बहुत अच्छी तरह से शामिल थीं। जहां तक ​​मुझे पता है, ये सभी चीजें अभी भी उपलब्ध हैं। लेकिन आपको खुद को पेशेवर कहने के लिए अभी बहुत कुछ जानने की जरूरत है।

अजगर


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

मेरी राय में, पायथन अभी भी अपने गणितीय तंत्र की गरीबी से पीड़ित है। इसमें ऐसी असुविधाजनक छोटी चीजें शामिल हैं जैसे कि ^ की बजाय **, @ की उपस्थिति का उपयोग मैट्रिसेस को गुणा करने के लिए किया जाता है (इसे हाल ही में जोड़ा गया था!), आकार नहीं, बल्कि मैट्रिक्स का आकार, पंक्ति-उन्मुख भंडारण, आदि। अगर आपको लगता है कि V.conj ()। T @ D ** 3 @ V V ∗ D 3 V की तुलना में अधिक सुंदर है, तो सबसे अधिक संभावना है कि आप अपने सिर के साथ बिल्कुल ठीक नहीं हैं। इसके अलावा, अनुक्रमण 0 से शुरू होता है (1 के बजाय)। मेरे पास विपरीत राय से परिचित होने का अवसर था, हालांकि, मेरी राय में, यह इतना आश्वस्त नहीं है, जाहिर है, यह सब व्यक्तिगत पसंद का मामला है, इंटरनेट पर पवित्र युद्धों का विषय है, क्योंकि आप हमेशा अपने लाभ के लिए एक बोझिल उदाहरण दे सकते हैं, वास्तव में यह मेरे लिए क्या है यह आश्वस्त लगता है, क्योंकि दशकों से हमने हमेशा 1 के साथ वैक्टर और मैट्रिसेस की गणितीय अनुक्रमण शुरू किया है, और कई छद्म कोड इस धारणा पर आधारित हैं।

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

ऐसे स्थान भी हैं जहां संख्यात्मक पारिस्थितिकी तंत्र थोड़ा खराब दिखता है। उदाहरण के लिए, 2019 में वर्ग और ODE सॉल्वर न्यूनतम दिखते हैं। जहां तक ​​मैं बता सकता हूं कि डीएई, डीडीई, सहानुभूति या निहित सॉल्वर के लिए कोई विधियां नहीं हैं जो कि क्रायलोव के आंतरिक पुनरावृत्तियों की अनुमति देते हैं। देखिए, ये कार्य ज्यादातर 30 साल या उससे अधिक के होते हैं - वे अभी भी अच्छे हैं, लेकिन एकदम सही हैं। Matplotlib के साथ काम करने के लिए एक अद्भुत पैकेज है, और कुछ मामलों में यह MATLAB से बेहतर लग रहा था, लेकिन मुझे 3 डी याद है।

कुछ विशेषज्ञों का तर्क है कि कारण हैं कि पायथन कोड संकलित भाषाओं के साथ गति से लड़ने की कोशिश कर रहा है। मैं खोज परिणाम पर हैरान हूं " अजगर बहुत धीमा है ।" पायथन चैंपियन ने कई तर्क / माफी का हवाला दिया जो लोगों ने MATLAB के लिए किए थे। इसका मतलब यह नहीं है कि वे गलत हैं, लेकिन यह सिर्फ धारणा की समस्या से अधिक है।

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

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

जूलिया


जूलिया के अपने फायदे और नुकसान हैं क्योंकि यह देर से है। मैं जूलिया के रचनाकारों की यह समझने के लिए प्रशंसा करता हूं कि वे और अधिक कर सकते थे

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

मेरा मानना ​​है कि काफी हद तक वे सफल रहे हैं। संस्करण 1.0 की रिहाई तक, वे REPL से और MATLAB से थोड़ा अलग लग रहे थे। (लिनसेंज की तुलना में लाइनरेंज कितना सही है?) हालांकि यह नाइटपैकिंग है।

यह मेरी पहली भाषा है, जिसका उपयोग ASCII से आगे जाने की क्षमता के साथ किया गया है। मुझे फी जैसे ऑपरेटरों और ≈ जैसे चरों के उपयोग से अत्यधिक संतुष्टि मिलती है। यह एक सुंदर आवरण से अधिक है; हमारे द्वारा लिखित गणितीय अभिव्यक्तियों की तरह अधिक देखने में सक्षम होना एक वास्तविक प्लस है, हालांकि यह सीखने और प्रलेखन को थोड़ा जटिल करता है।

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

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

संख्यात्मक पारिस्थितिकी तंत्र तेजी से विकसित हो रहा है। मेरा नंबर एक उदाहरण DifrentialEquations.jl है , जो अद्भुत क्रिस राकुटस्का द्वारा लिखा गया है। यदि यह सॉफ़्टवेयर जल्द ही किसी भी समय विल्किंसन पुरस्कार नहीं जीत पाता है, तो सिस्टम टूट जाता है। बस साइट पर जाएं और अपील करने के लिए तैयार हो जाएं।

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

जूलिया में प्रोग्रामिंग करने से मुझे सहज महसूस करने में कुछ समय लगा (शायद मैं अभी बूढ़ा हो रहा हूं और क्रिस्टलीकृत हो रहा हूं)। इससे मुझे डेटा प्रकारों के बारे में अधिक लगता है जो मैं चाहूंगा, और हमेशा एक संदेह है कि मैंने कुछ करने का सही तरीका याद किया। लेकिन दैनिक उपयोग के लिए, मैं जूलिया को MATLAB के रूप में बदल दूंगा।

परिणाम


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

MATLAB वैज्ञानिक कंप्यूटिंग की दुनिया से बीएमडब्ल्यू सेडान की तरह है। सामान की बात करने से पहले ही यह महंगा है। (टूल किट) आप निर्दोष, निर्बाध संचालन और सेवा के लिए भुगतान करते हैं। लेकिन यह घृणा की एक विषम मात्रा को भी आकर्षित करता है।

पायथन एक फोर्ड पिकअप ट्रक है। यह कई (संयुक्त राज्य अमेरिका में) द्वारा सर्वव्यापी और प्रिय है। यह आप जो चाहें कर सकते हैं, और यह अन्य कारों को क्या करने के लिए डिज़ाइन किया गया है। सबसे अधिक संभावना है, आप इसे अभी और फिर चाहते हैं। लेकिन यह आपको ड्राइविंग का ज्यादा अनुभव नहीं देता है।

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


ब्लॉग भी पढ़ें
EDISON कंपनी:


के लिए 20 पुस्तकालय
शानदार iOS आवेदन

Source: https://habr.com/ru/post/hi480716/


All Articles