वैज्ञानिक कंप्यूटिंग के लिए सर्वश्रेष्ठ भाषाएँ [बंद]


10

ऐसा लगता है जैसे अधिकांश भाषाओं में कुछ वैज्ञानिक कंप्यूटिंग लाइब्रेरी उपलब्ध हैं।

  • अजगर है Scipy
  • Rust है SciRust
  • C++सहित कई ViennaCLऔर हैArmadillo
  • Javaहै Java Numericsऔर Coltसाथ ही कई अन्य

नहीं जैसी भाषाओं का उल्लेख Rऔर Juliaवैज्ञानिक कंप्यूटिंग के लिए स्पष्ट रूप से तैयार किया गया है।

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

efficiency  statistics  tools  knowledge-base  machine-learning  neural-network  deep-learning  optimization  hyperparameter  machine-learning  time-series  categorical-data  logistic-regression  python  visualization  bigdata  efficiency  classification  binary  svm  random-forest  logistic-regression  data-mining  sql  experiments  bigdata  efficiency  performance  scalability  distributed  bigdata  nlp  statistics  education  knowledge-base  definitions  machine-learning  recommender-system  evaluation  efficiency  algorithms  parameter  efficiency  scalability  sql  statistics  visualization  knowledge-base  education  machine-learning  r  python  r  text-mining  sentiment-analysis  machine-learning  machine-learning  python  neural-network  statistics  reference-request  machine-learning  data-mining  python  classification  data-mining  bigdata  usecase  apache-hadoop  map-reduce  aws  education  feature-selection  machine-learning  machine-learning  sports  data-formats  hierarchical-data-format  bigdata  apache-hadoop  bigdata  apache-hadoop  python  visualization  knowledge-base  classification  confusion-matrix  accuracy  bigdata  apache-hadoop  bigdata  efficiency  apache-hadoop  distributed  machine-translation  nlp  metadata  data-cleaning  text-mining  python  pandas  machine-learning  python  pandas  scikit-learn  bigdata  machine-learning  databases  clustering  data-mining  recommender-system 

12
यहां कोई सवाल नहीं है। यदि आपको प्रोग्रामिंग भाषा पर बुनियादी शोध करने की आवश्यकता है, तो आप अपने शौक-घोड़े को आगे बढ़ाने के लिए विकिपीडिया पढ़ने से बेहतर है कि किसी के लिए यहां इंतजार करें।
डिर्क एडल्डबुलेटेल

@DirkEddelbuettel बहुत अच्छी बात है। सोचा कि बीटा में इस बिंदु पर इसे परिष्कृत करने की तुलना में सामग्री का उत्पादन करने की कोशिश करना बेहतर था, लेकिन मैं एसई बेटस के बारे में एक बड़ी राशि नहीं जानता। क्या वह मेरी ओर से एक अच्छी चाल थी या नहीं?
जूनो

1
देखो इन नंबरों।
इमर

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

1
@indico प्रयास करें cran.r-project.org/web/packages/overlap/index.html जो सिर्फ पहले एक मैं यादृच्छिक पर लेने के लिए हुआ है। लेकिन वास्तव में, मैंने कई सांख्यिकीविदों को व्यक्तिगत रूप से जाना है जिन्होंने आर पैकेज लिखे हैं। उनमें से एक ने भी अभी तक अजगर नहीं लिखा है। वार्तालाप को थोड़ा चौड़ा करने के लिए, kdnuggets.com/2013/08/… दिलचस्प है।
लेम्बिक

जवाबों:


12

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

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

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

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

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


इस उत्तर को जोड़ने के लिए: मापनीयता के संदर्भ में, Scalaऔर Goध्यान देने योग्य हैं।
मार्क क्लेसेन

मैं स्पष्टता और संक्षिप्तता जोड़ूंगा (वाक्य रचना और भाषा वास्तुकला से संबंधित है, लेकिन न केवल)। दर्द के बिना तेजी से लिखने और पढ़ने में सक्षम होने से बहुत फर्क पड़ता है (क्योंकि प्रोग्रामर का समय मशीन के समय से अधिक महंगा है)।
पायोत्र मिगदल

5

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

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

मुझे पता है कि मेरे अधिकांश बिंदु स्थापित भाषाओं के पक्ष में हैं। यह is गेट-थिंग्स-किया ’परिप्रेक्ष्य से है।

मैंने कहा, मेरा व्यक्तिगत रूप से मानना ​​है कि निम्न स्तर की भाषा और उच्च स्तरीय भाषा में कुशल बनना कहीं बेहतर है:

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

4

पहले आपको यह तय करने की आवश्यकता है कि आप क्या करना चाहते हैं, फिर उस कार्य के लिए सही उपकरण देखें।

पहले संस्करणों के लिए R का उपयोग करना और यह देखना कि आपका दृष्टिकोण सही है या नहीं, एक बहुत ही सामान्य तरीका है। इसकी गति में थोड़ी कमी है, लेकिन इसमें बहुत ही शक्तिशाली कमांड और एडोन लाइब्रेरी हैं, कि आप इसके साथ लगभग कुछ भी आज़मा सकते हैं: http://www.r-project.org/

दूसरा विचार यह है कि यदि आप पुस्तकालयों के पीछे के एल्गोरिदम को समझना चाहते हैं, तो आप न्यूमेरिकल रेसिपीज़ पर एक नज़र डाल सकते हैं। वे विभिन्न भाषाओं और सीखने के लिए उपयोग करने के लिए स्वतंत्र हैं। यदि आप उन्हें व्यावसायिक उत्पादों में उपयोग करना चाहते हैं, तो आपको लाइसेंस प्राप्त करने की आवश्यकता है: http://en.wikipedia.org/wiki/Numerical_Recipes

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

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

यदि आपके पास एक कार्यशील संस्करण है, तो इसे किसी भी अन्य भाषा में पोर्ट करना लगभग आसान है जो आपको लगता है कि अधिक प्रदर्शनकारी है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.