MATLAB और R को हार्डकोर प्रोग्रामर के रूप में जीवित रखना [बंद]


25

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

  • (दोनों): वैक्टर और मैट्रिस पर अत्यधिक जोर इस हद तक है कि कोई सच्चा आदिम नहीं है।
  • (दोनों): बुनियादी स्ट्रिंग हेरफेर की कठिनाई।
  • (दोनों): हैश टेबल और "वास्तविक", यानी टाइप-पैरामीट्रिक और नेस्टेबल, सरणियों जैसी बुनियादी डेटा संरचनाओं के समर्थन में अभाव या अजीबता।
  • (दोनों): जब तक आप अपने कोड को सदिश करने के लिए पीछे की ओर झुकते नहीं हैं, तब तक वे वास्तव में धीमी गति से व्याख्या किए गए भाषा मानकों से भी धीमी होती हैं।
  • (दोनों): वे बाहरी दुनिया के साथ बातचीत करने के लिए डिज़ाइन नहीं किए गए लगते हैं। उदाहरण के लिए, दोनों काफी भारी प्रोग्राम हैं जो लॉन्च होने में थोड़ा समय लेते हैं और लगता है कि इसे सरल टेक्स्ट फ़िल्टर प्रोग्राम को लिखने के लिए आसान नहीं बनाया गया है। इसके अलावा, अच्छे स्ट्रिंग प्रोसेसिंग की कमी किसी भी चीज में फ़ाइल I / O बनाता है लेकिन असंभव के पास बहुत मानक रूप हैं।
  • (दोनों): ऑब्जेक्ट ओरिएंटेशन एक बहुत ही बोल्ट-ऑन महसूस होता है। हाँ, आप इसे कर सकते हैं, लेकिन यह O में C की तुलना में अधिक मुहावरेदार नहीं लगता है।
  • (दोनों): संदर्भ प्रकार प्राप्त करने का कोई स्पष्ट, सरल तरीका नहीं है। कोई संकेत या वर्ग संदर्भ नहीं। उदाहरण के लिए, मुझे नहीं पता कि आप इन भाषाओं में से किसी एक में अपनी खुद की लिंक की गई सूची को कैसे रोल करते हैं।
  • (MATLAB): आप एक ही फ़ाइल में कई शीर्ष स्तर के कार्य नहीं कर सकते, बहुत लंबे कार्यों और कट-एंड-पेस्ट कोडिंग को प्रोत्साहित करते हैं।
  • (MATLAB): इंटेगर जाहिरा तौर पर एक प्रथम श्रेणी प्रकार के रूप में मौजूद नहीं है।
  • (R): मूल निर्मित डेटा संरचनाएं बहुत उच्च स्तर की और खराब दस्तावेज वाली प्रतीत होती हैं, और कभी भी ऐसा प्रतीत नहीं होता है कि मैं अपने समान लेकिन निचले स्तर की डेटा संरचनाओं के साथ अपने अनुभव की अपेक्षा करता हूं।
  • (आर): प्रलेखन सभी जगह फैला हुआ है और लगभग ब्राउज़ या खोज करने के लिए असंभव है। यहां तक ​​कि डी, जो अक्सर खराब प्रलेखन के लिए खटखटाया जाता है और अभी भी काफी अल्फा-ईश है, जहां तक ​​मैं बता सकता हूं, काफी बेहतर है।
  • (R): कम से कम जहां तक ​​मैं जानता हूं, इसके लिए कोई अच्छा आईडीई नहीं है। फिर से, यहां तक ​​कि डी, एक छोटे से समुदाय के साथ एक काफी अल्फा-ईश भाषा, बेहतर करता है।

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

R और MATLAB मुझे इतने अजीब क्यों लगते हैं? क्या कोई अन्य प्रमुख मुद्दे हैं जिन पर आपने गौर किया है कि इन भाषाओं को कट्टर प्रोग्रामरों के लिए अजीब माना जा सकता है? जब उनका उपयोग आवश्यक हो, तो कुछ अच्छी उत्तरजीविता क्या है?

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


40
अजगर अब "कट्टर" प्रोग्रामर के लिए लिखा है? ऐसा कब होगा?
TZHX

3
@TZHX: ठीक है, तो शायद कट्टर गलत शब्द था। एक बेहतर वाक्यांश होगा "लोग जो प्रोग्रामर हैं और प्रोग्रामर की तरह सोचते हैं।"
dsimcha

17
मैं वास्तव में "कट्टर प्रोग्रामर" शब्द को नापसंद करता हूं। ऐसा लगता है कि अभिजात्य के कुछ रूप की तरह लगता है, और शब्द "सामान्य प्रयोजन प्रोग्रामर" बस एक ही बिंदु बनाने के लिए पर्याप्त होगा।
जुब

5
आप शिकायत कर रहे हैं कि R और Matlab हार्डकोर प्रोग्रामर के लिए नहीं हैं, लेकिन आपकी शिकायतों से लगता है कि आप R और Matlab का उपयोग करने के लिए पर्याप्त हार्डकोर नहीं हैं। यदि आप ऐसी भाषा में लिखना चाहते हैं जो अल्गोल परिवार से नहीं है, तो आपको इसकी शर्तों पर विचार करना होगा।
पीटर टेलर

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

जवाबों:


29

संभवतः बड़े पैमाने पर प्रोग्रामिंग के लिए या सामान्य प्रयोजन की भाषाओं के साथ सामान्य कार्यक्रमों की प्रोग्रामिंग के लिए आवश्यक डोमेन विशिष्ट भाषाओं के साथ संपर्क करना एक बुरा विचार है। डोमेन विशिष्ट होने के नाते, उन्हें संभवतः एक कुशल सीखने की अवस्था और एक असुविधाजनक दिमाग सेट करने की आवश्यकता होगी ताकि इसे सबसे अधिक कुशलता से उपयोग किया जा सके। मैं अत्यधिक अनुकूलित, डोमेन विशिष्ट कोड (उदाहरण के लिए, कुशल और स्वच्छ ओपनलाइन लेखन पर) के साथ, मैटलैब में लिखने के कोड पर विचार करता हूं। मैंने उन्हें अन्य भाषाओं में उपयोग किए जाने वाले पुस्तकालयों के रूप में उपयोगी होने की दिशा में अधिक से अधिक देखा है - उदाहरण के लिए, http://www.mathworks.com/matlabcentral/fileexchange/12987-integrating-matlab-with-c

मैं कहूंगा, इन DSL के लिए उसी प्रक्रिया का उपयोग करें जैसा आप किसी अन्य के लिए करेंगे:

  • उन समस्याओं का सावधानीपूर्वक चयन करें, जिन्हें आप Matlab या R का उपयोग करके हल कर रहे हैं, यह सुनिश्चित करने के लिए कि वे वास्तव में उन समस्याओं के प्रकार हैं जिन्हें वे हल करने के लिए सर्वश्रेष्ठ हैं। उदाहरण के लिए, अपने वैक्टर में हेरफेर करने के लिए मतलाब का उपयोग करें, और अपने बाकी काम के लिए नहीं, अगर आप इससे बच सकते हैं
  • आम तौर पर, आप जिस समस्या को हल करने के लिए बनाए जाते हैं, उस समस्या के सटीक सबसेट के लिए मतलाब या आर में उन भागों को सीमित करने के लिए समाधान को मिलाएं / मिलाएं।
  • डोमेन में एक विशिष्ट उपयोगकर्ता की मानसिकता का पालन करें, जो आपके समाधान का डिजाइन और निर्माण करते समय भाषाओं के लिए बनाया जाता है - उदाहरण के लिए, मटलब कार्यक्रम पर काम शुरू करने से पहले दुनिया के प्रति एक वेक्टर-गणितीय दृष्टिकोण को अनुकूलित करें; संभवतया, मानक गणित संकेतन का उपयोग करते हुए, कागज पर अपना काम लिखें
  • अपने आप को एक आरामदायक कार्य वातावरण बनाने के लिए आवश्यक अतिरिक्त कार्य करें, और काम करने के लिए आवश्यक उपकरण प्राप्त करें, भले ही डीएसएल के लिए मानक से अलग हो। यदि आप एक emacs उपयोगकर्ता हैं, उदाहरण के लिए, अपने काम को करने के लिए emacs के लिए matlab मोड का उपयोग करने पर विचार करें; सुनिश्चित करें कि यह अन्य भाषाओं के लिए आपके द्वारा सेट किए गए मोड के साथ-साथ काम करता है
  • बाहर स्विच करने के लिए तैयार रहें। खासकर यदि आपको अक्सर भाषा में वापस आना पड़ता है, तो अपने आप को एक विश्वसनीय पारिस्थितिकी तंत्र बनाने के लिए सुनिश्चित करें जहां आप डीएसएल में जो काम करते हैं वह केवल डोमेन विशिष्ट कार्य के लिए निहित है, और यह किसी अन्य भाषा के लिए स्विच करना जितना संभव हो उतना आसान है अपने काम के बाकी। अन्य प्रणालियों में गैर-डीएसएल विशिष्ट कार्य करने के तरीकों की तलाश करने के लिए, सामान्य से अधिक बार अपने आप को याद दिलाएं

3
आप जो कहते हैं वह सही समझ में आता है और आमतौर पर मैं कैसे चीजें करता हूं जब मुझे मैटलैब या आर का उपयोग करना पड़ता है। इसका निराशाजनक हिस्सा कई भाषाओं को कई चीजों और कई एड्रेस स्पेस के साथ एकीकृत करने के कारण होता है। आमतौर पर, इसमें टेक्स्ट फ़ाइलों को डंप करने में मनमाने ढंग से बिंदुओं पर डंपिंग करना और उन्हें वापस पढ़ना, या गोंद परत को कॉन्फ़िगर करने के लिए कुछ भंगुर, बदसूरत का उपयोग करना शामिल है।
dsimcha

25

मैं इसे इस बात से परिचित कराऊंगा कि मैं MATLAB से परिचित हूं, लेकिन आर नहीं।

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

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

MATLAB आपके लिए बहुत अलग है क्योंकि यह वैज्ञानिकों और इंजीनियरों को मैट्रिक्स गुणा और ODE गणनाओं को बहुत तेज़ी से करने देने के लिए डिज़ाइन किया गया था। MATLAB एक "कट्टर" भाषा की आपकी परिभाषा तक नहीं मापता है क्योंकि यह कभी माना नहीं गया था। MATLAB के बारे में Python या D के संदर्भ में सोचने की कोशिश करना C के संदर्भ में LISP या Haskell के बारे में सोचने की कोशिश करने जैसा है या JavaScript के संदर्भ में Verilog और VHDL के बारे में --- वे अलग-अलग समस्याओं को हल करते हैं और समस्या के समाधान को मौलिक रूप से अलग-अलग तरीकों से हल करते हैं। निष्पक्ष होने के लिए, MATLAB ने कुछ (ठीक है, बहुत सारी) विचित्र भाषा-डिज़ाइन पसंद कीं, जो कि मैं अपने सिर को चारों ओर लपेट नहीं सकता, यहां तक ​​कि एक डोमेन-विशिष्ट भाषा के परिप्रेक्ष्य से भी। लेकिन ऐसा कोई विशेष कारण नहीं है कि एक खगोलशास्त्री को इस बात का ध्यान रखना चाहिए कि आकाशीय पिंड X, खगोलीय पिंड Y से ठीक 48 AU दूर है जैसा कि 48.0 AU के विपरीत है।

अब, शुक्र है, कुछ पुस्तकालय दृश्य पर आ रहे हैं, जो बिल्कुल आपके सुझाव के अनुसार हैं: एक सामान्य उद्देश्य वाली भाषा में वैज्ञानिक गणना के लिए अच्छा समर्थन। पायथन के लिए, NumPy / Matplotlib है जिसमें कुछ खुरदरे किनारे हैं लेकिन अन्यथा पायथन के अंदर उचित MATLAB कार्यक्षमता प्रदान करता है। इस तरह की अन्य परियोजना नहीं होने का कारण यह है कि पुस्तकालयों को MATLAB और FORTRAN द्वारा पहले से ही कवर किए गए बाजार को लिखना और उनकी सेवा करना अविश्वसनीय रूप से कठिन है।

यदि आपको पूरी तरह से MATLAB या R का उपयोग करना है, तो आप प्रोग्रामिंग में उन्हें "कट्टर" प्रोग्रामर की तरह नहीं देख सकते हैं, आपको इसे "कट्टर" वैज्ञानिक या इंजीनियर की तरह देखना होगा। लिस्प के लिए, आप है प्रत्यावर्तन में सोचते हैं। MATLAB में, आपको बस मेट्रिसेस में सोचना होगा। रैखिक बीजगणित पर ब्रश करें ( इस विषय पर एमआईटी के व्याख्यान एक महान समीक्षा हैं)। अन्यथा, MATLAB को "जीवित रहने" का एकमात्र तरीका यह पहचानने के लिए अभ्यास के साथ है कि कब लूप को वेक्टर ऑपरेशन से बदला जा सकता है या जब आपकी समस्या किसी बाहरी उत्पाद के आइगेनवैल्यू को खोजने के लिए कम हो जाती है।


हां, कुल मिलाकर मुझे Numpy / Scipy / Matplotlib बहुत पसंद है और जब भी स्पष्ट विकल्प MATLAB / R होगा, उनका उपयोग करेंगे। मेरे बारे में केवल यही शिकायतें हैं कि वे MATLAB / R के समान गहरे नहीं हैं और, चूंकि वे पायथन हैं, फिर भी वे कुछ हद तक धीमे हैं।
dsimcha

4
@dsimcha, यह तथ्यात्मक रूप से गलत है । इस प्रदर्शन के अध्ययन में, Numpy MATLAB के बराबर है, और Pyrex C ++ के 2 के एक कारक के भीतर अच्छी तरह से है।
wvoq

@wvoq: स्पष्टीकरण: मेरा मतलब था कि पायथन दुभाषिया धीमा है, नम्पी नहीं। मुझे पता है कि Numpy ज्यादातर BLAS और LAPACK के लिए एक रैपर है, जो तेज़ हैं। बेशक इस कोड में कॉल करने का निश्चित ओवरहेड अभी भी है। मुझे पाइरेक्स, साइथन आदि के बारे में भी पता है, और वे मदद करते हैं, लेकिन आप अभी भी भाषाओं को ठीक-ठाक स्तर पर मिला रहे हैं और यह अभी भी घर्षण का एक स्रोत हो सकता है।
dsimcha

2
@dsimcha, Numpy को बुलाने का ओवरहेड व्यावहारिक रूप से एक स्थिर है। मेरे द्वारा किए गए प्रदर्शन अध्ययन में, आप C ++ के साथ एक सेकंड के कुछ दसवें हिस्से को प्राप्त कर रहे हैं। उस समय की तुलना लेखन और डिबगिंग में बिताए समय से की जानी चाहिए, और उस पर BLAS कॉल डीबग करना चाहिए। यह पूछने का निर्देश हो सकता है कि विधानसभा में सब कुछ क्यों नहीं लिखा जाए? या यहां तक ​​कि सीधे मशीन कोड, असेंबली से मशीन कोड में रूपांतरण के बाद से कुछ निश्चित ओवरहेड कहते हैं?
1

3
@dsimcha हुह? आप एक ही (तेज़) भाषा में सब कुछ करना चाहते हैं, आपको पायथन सबसे ज्यादा पसंद है और फिर आप पायथन के धीमे होने की शिकायत कर रहे हैं? तो पूरी बात क्या है मुझे लगता है कि आप केवल MATLAB को अधिक सामान्य प्रयोजन के लिए चाहते हैं और एक व्याख्या की गई भाषा की तुलना में तेज़ हो सकते हैं?
क्रिस कहते हैं

14

अपने आप के संदर्भ में "कट्टर प्रोग्रामर" शब्द का बार-बार उपयोग। आपके आग्रह के साथ कि R और MATLAB के डिजाइनर नहीं हैं , मुझे बहुत मूर्खतापूर्ण तरीके से मारता है और लोगों को आपकी आलोचनाओं को गंभीरता से नहीं लेने के लिए प्रोत्साहित करता है।

यदि आप आर की कुछ गंभीर आलोचना पढ़ना चाहते हैं, तो आप आर के डिजाइनरों में से एक, रॉस इहाका द्वारा इस टुकड़े को पढ़ने के लिए अच्छा करेंगे । यह डी या अजगर का उपयोग करने की तुलना में आर डिजाइन करने के लिए मुझे काफी कठिन लगता है ।


2
-1। मेरा मतलब कभी नहीं था कि MATLAB और R के डिजाइनर बहुत अच्छे, कट्टर प्रोग्रामर के अलावा कुछ और हैं। हालांकि, MATLAB और R हार्डकोर प्रोग्रामर्स के लिए डिज़ाइन नहीं किए गए हैं ।
dsimcha

3
"... ऐसा लगता है कि इन भाषाओं को ऐसे लोगों द्वारा डिज़ाइन किया गया था जो कट्टर प्रोग्रामर नहीं हैं और कट्टर प्रोग्रामर की तरह नहीं सोचते हैं।"
wvoq

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

1
इसके अलावा, परिभाषा के संदर्भ में, मुझे लगा कि यह स्पष्ट है, लेकिन एक "हार्डकोर प्रोग्रामर" सिर्फ एक व्यक्ति है जो संदर्भ / बिंदुओं, ऑब्जेक्ट ओरिएंटेशन, लैम्ब्डा फ़ंक्शन, बुनियादी डेटा संरचनाओं, आदि जैसी बुनियादी प्रोग्रामिंग अवधारणाओं के साथ सहज है और इसे विकसित करने के लिए उपयोग किया जाता है। एक सामान्य प्रयोजन की भाषा में।
dsimcha

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

9

वैक्टर और मैट्रिसेस पर अत्यधिक जोर इस हद तक है कि कोई वास्तविक आदिम नहीं हैं।

यह निर्भर करता है कि आप एक सच्चे आदिम को क्या कहते हैं। आर में, एक वेक्टर एक सच्चा आदिम है; अर्थात्, सभी चर वैक्टर हैं। इसी तरह, MATLAB में सभी चर matrices हैं।

बुनियादी स्ट्रिंग हेरफेर की कठिनाई।

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

हैश तालिकाओं और "वास्तविक", यानी टाइप-पैरामीट्रिक और नेस्टेबल, सरणियों जैसी बुनियादी डेटा संरचनाओं के समर्थन में अभाव या अजीबता।

R में, वैक्टर के नाम हैं जो हैश की तरह काम करता है। पैकेज hashऔर filehashपैकेज भी हैं। MATLAB कार्यान्वयन के बारे में निश्चित नहीं है, लेकिन यदि आप चाहें तो आप JAVA या .NET संस्करणों को आसानी से कॉल कर सकते हैं।

जब तक आप अपने कोड को सदिश करने के लिए पीछे की ओर झुकते नहीं हैं, तब तक वे वास्तव में धीमी गति से व्याख्या किए गए भाषा मानकों के अनुसार होते हैं।

एक बार जब आप वेक्टराइजेशन को लटका देते हैं (मुझे यकीन है कि यदि आप वास्तव में कट्टर हैं, तो आप अन्य भाषाओं में लौटने पर लूप का उपयोग करने के लिए शाप देंगे)। प्रोग्रामिंग की गति के लिए निष्पादन की गति एक व्यापार है।

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

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

ऑब्जेक्ट ओरिएंटेशन एक बहुत ही बोल्ट-ऑन महसूस होता है। हाँ, आप इसे कर सकते हैं, लेकिन यह O में C की तुलना में अधिक मुहावरेदार नहीं लगता है।

माना; वे मुख्य रूप से प्रक्रियात्मक भाषाएं हैं।

संदर्भ प्रकार प्राप्त करने का कोई स्पष्ट, सरल तरीका नहीं है। कोई संकेत या वर्ग संदर्भ नहीं। उदाहरण के लिए, मुझे नहीं पता कि आप इन भाषाओं में से किसी एक में अपनी खुद की लिंक की गई सूची को कैसे रोल करते हैं।

MATLAB में आर। में सहमत, संदर्भ को हैंडल कहा जाता है।

आप एक ही फ़ाइल में कई शीर्ष स्तर के कार्य नहीं कर सकते हैं, बहुत लंबे कार्यों और कट-एंड-पेस्ट कोडिंग को प्रोत्साहित करते हैं।

बकवास। बस कई फाइलें बनाएं।

प्रथम श्रेणी के रूप में इंटेगर स्पष्ट रूप से मौजूद नहीं हैं।

वे करते हैं। देखें int8, int16, int32और int64

मूल अंतर्निहित डेटा संरचनाएं बहुत उच्च स्तर और खराब रूप से प्रलेखित लगती हैं, और कभी भी ऐसा प्रतीत नहीं होता है कि मैं अपने समान लेकिन निचले स्तर के डेटा संरचनाओं के साथ अपने अनुभव की अपेक्षा करता हूं।

वे डेटा विश्लेषण करने के लिए अनुकूल हैं। कृपया अनपेक्षित व्यवहार के विशिष्ट उदाहरण दें।

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

कई प्रकार के प्रलेखन हैं। के साथ शुरू करो ?some_function, RSiteSearch('some concept'), rseek.org , और sosपैकेज। इंस्टॉल के साथ आने वाले मैनुअल का उल्लेख नहीं करना। या एक अच्छी किताब

कम से कम जहां तक ​​मैं जानता हूं, इसके लिए कोई अच्छी आईडीई नहीं है। फिर से, यहां तक ​​कि डी, एक छोटे से समुदाय के साथ एक काफी अल्फा-ईश भाषा, बेहतर करता है।

आर्किटेक्ट या RStudio या क्रांति Analytics IDE आज़माएं। लिंक और अधिक विकल्पों के लिए स्टैक ओवरफ़्लो जानकारी पृष्ठ के "आईडीई और आर के लिए संपादक" अनुभाग देखें।


3

MATLAB जावा और C / C ++ के साथ एकीकृत कर सकता है। आप इन भाषाओं में अपने सभी गैर-संख्यात्मक कार्यभार को लागू कर सकते हैं, और MATLAB से उन्हें आमंत्रित कर सकते हैं।

उनका उपयोग आवश्यक है

क्या कोई कारण है कि यह आवश्यक है? क्या आप अन्य लोगों द्वारा लिखे गए मौजूदा MATLAB कोड आधार पर काम कर रहे हैं? क्या यह एक काम की आवश्यकता है? (या कक्षा की आवश्यकता यदि आप स्कूल में हैं) यदि नहीं, तो आप इसके बजाय SciPy या NumPy का उपयोग करने पर विचार कर सकते हैं।

दुर्भाग्य से, मेरी व्यक्तिगत राय में, यदि यह स्थिति किसी पर मजबूर हो रही है, तो यह हमेशा जीवित नहीं रहता है। कॉलेज में भी, प्रत्येक इंजीनियरिंग छात्र कम्प्यूटेशनल सोच के MATLAB तरीके के लिए उपयोग नहीं किया जा सकता है।


2
मैं इन समाधानों से अवगत हूं, लेकिन वे काफी पीछे की ओर प्रतीत होते हैं। मैं MATLAB को C ++, Java इत्यादि से कॉल करना चाहूंगा, अन्य तरीके से नहीं। मैं कुछ भी चाहता हूं, लेकिन MATLAB मेरी "ड्राइवर" भाषा है।
dsimcha

2
@dsimcha आप C. MATLAB और R पुस्तकालयों को C. से कॉल कर सकते हैं। See mathworks.com/help/techdoc/matlab_external/f38569.html या math.univ-montp2.fr/~pudlo/R_files/call_R.pdf
चार्ल्स ई। अनुदान

0

मैं MATLAB, पायथन और सी (और कभी-कभी C ++) के साथ काम करता हूं, और मैं खुद को एक सॉफ्टवेयर डेवलपर होने के लिए मानता हूं, विपरीत सहयोगियों को बैठाता हूं जो डेटा वैज्ञानिक, गणितज्ञ या अन्य डोमेन विशेषज्ञ होते हैं।

हालाँकि, मैं सबसे पहले यह स्वीकार करना चाहूंगा कि यह सामान्य प्रयोजन की प्रोग्रामिंग भाषा नहीं है, इस मायने में कि सी या पायथन है, मुझे वास्तव में MATLAB में स्क्रिप्ट लिखने में बहुत मज़ा आता है, खासकर टाइम-सीरीज़ विश्लेषण या इमेज प्रोसेसिंग जैसी चीज़ों के लिए।

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

यह इस तरह के क्षण हैं जो वास्तव में मुझे MATLAB की सराहना करते हैं, और मुझे इसके अन्य, कई और बहु-चर्चित पापों की अनदेखी करने की अनुमति देते हैं।


ध्यान दें कि सुन्न में तार्किक अनुक्रमण है: docs.scipy.org/doc/numpy/user/…
jarondl
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.