2010-11-11 16 views
17

मैं Google और स्टैक ओवरफ़्लो को पागल की तरह खोज रहा हूं और अभी तक निम्नलिखित प्रश्नों का उत्तर देने के लिए कोई हालिया, पूरी तरह से प्रासंगिक जानकारी नहीं मिली है: सर्वश्रेष्ठ सी #/एफ #/नेट नेट गणित पुस्तकालय (विशेष रूप से, वे लोग लैपैक, आदि के समान कार्यक्षमता को लपेटें या कार्यान्वित करें)?डॉटन्यूमेरिक्स, अल्गिलिब, डीएनएनालिटिक्स, मैथनेट, एफ # न्यूमेरिक्स, एमटीएक्सवीसी के लिए?

स्टैक ओवरफ़्लो पर बेहतर पदों है कि मैं देखा था था: https://stackoverflow.com/questions/3227647/open-source-math-library-for-f

कारण यह है कि उस पोस्ट, और अन्य पिछले पोस्ट, पर्याप्त रूप से जवाब नहीं दिया मेरे सवाल किया गया है कि उपयोगकर्ता अनुभव का कोई व्यवस्थित तुलना विभिन्न पुस्तकालयों के साथ दिया गया था।

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

नीचे "मुक्त"/ओपनसोर्स/किफायती .NET/F #/C# गणित की एक व्यापक सूची है पुस्तकालय जो - जहां तक ​​मुझे पता है - एक रैखिक बीजगणित सुविधा सेट है। मैं गहराई से आभारी अगर स्टैक ओवरफ़्लो पर यहाँ समुदाय किसी भी अनुभवों निम्नलिखित पुस्तकालयों के साथ उनके पास है में चिप होगा:

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

डॉटन्यूमेरिक्स सी # में लैपैक के व्यापक कार्यान्वयन की तरह प्रतीत होता है, लेकिन मुझे कोई भी व्यक्ति नहीं मिला है जिसने अपने अनुभव कहीं भी साझा किए हैं। Math.NET ऐसा लगता है कि यह अंततः .NET के लिए एक उत्कृष्ट, व्यापक गणित पुस्तकालय हो सकता है, लेकिन यह कहना मुश्किल है कि परियोजना कितनी सक्रिय है और ऐसा लगता है कि यह वर्तमान चरण में प्रवाह में बहुत अधिक है। Alglib एक या दो बार ठोस होने के रूप में बात की गई है, लेकिन मैं दूसरों के सापेक्ष उनके बारे में और अधिक सुनना चाहता हूं। मुझे देशी एफ # न्यूमेरिक्स लाइब्रेरी का समर्थन करने का विचार पसंद है, लेकिन मुझे यकीन नहीं है कि डेवलपर (फ्लाइंग फ्रॉग कंसल्टेंसी) ने न्यूमेरिक्स के लिए एफ # का समर्थन और विकास करना है ... और उनकी 1.0 रिलीज में वे किस कार्यक्षमता को शामिल करने की योजना बना रहे हैं और उनके क्या लक्ष्य की तारीख 1.0 रिलीज के लिए है।

+0

मैं के बाद से इस समस्या को नेट गणित पुस्तकालयों चिंताओं .net टैग लगाया। –

+2

dnAnalytics अब समर्थित नहीं है, इसलिए इसका उपयोग नहीं किया जाना चाहिए। इसकी सभी कार्यक्षमता को Math.NET न्यूमेरिक्स में स्थानांतरित कर दिया गया है (मूल पुस्तकालय समर्थन को छोड़कर)। Math.NET न्यूमेरिक्स प्रवाह में रहा है लेकिन एपीआई अंततः स्थिर हो गया है और हम जल्द ही 1.0 बीटा जारी करेंगे (केवल प्रबंधित कोड)। अब हम प्रबंधित कोड के प्रदर्शन में सुधार और देशी रैपर (एमकेएल, एटीएलएएस, और एसीएमएल) जोड़ने पर काम कर रहे हैं। हम अगले कई महीनों में 1.0 जारी करेंगे। और हम पुस्तकालय में एक एफ # इंटरफेस पर काम कर रहे हैं। – cuda

+0

उस cuda की प्रतिलिपि बनाएँ। मैं निश्चित रूप से भविष्य के लिए अपने रडार पर Math.NET रखूंगा। मुझे Math.NET के लिए जो कुछ मैंने देखा है (फीचर वार, लागू या योजनाबद्ध) मुझे पसंद है, इसलिए मैं ऑप्टोमिस्टिक हूं कि आप और अन्य योगदानकर्ता लाइब्रेरी के प्रदर्शन को प्रतिस्पर्धी बनाने में सक्षम होंगे, और देशी रैपर को एक में शामिल करेंगे पचाने योग्य/सुलभ तरीके से। जब भी आप दरवाजे से Math.NET प्राप्त करते हैं - मानते हैं कि इसका प्रदर्शन अच्छा है - यह समुदाय के लिए एक प्रमुख वरदान होगा। आपके और अन्य योगदानकर्ताओं के कड़ी मेहनत के लिए बहुत बहुत धन्यवाद! – Abe

उत्तर

13

गणित पुस्तकालय चुनने का एक आम गड़बड़ यह है कि हम उम्मीद करते हैं कि सब कुछ के लिए गणित पुस्तकालय मौजूद है।

लाइब्रेरी ढूंढने से पहले, आपको पहले पूछना चाहिए कि "किस तरह की गणित पुस्तकालय मैं चाहता हूं?"। फिर आपके पास मानदंडों की एक सूची होगी, जैसे ओपन सोर्स या नहीं, उच्च प्रदर्शन या नहीं, पोर्टेबल या नहीं, उपयोग करने में आसान या नहीं।

1) DotNumerics

(http://www.dotnumerics.com/)

वे एक fortran2C# का उपयोग करें:

के बाद अपनी सूची में पुस्तकालयों पर मेरी टिप्पणी (मैं पिछले दो इस्तेमाल नहीं किया है) है अनुवादक जो लैपैक प्रक्रियाओं कोड को सी # कक्षाओं में अनुवादित करता है। कच्चे लैपैक कक्षाओं के लिए उपयोगकर्ता के अनुकूल सी # रैपर लिखे गए हैं।

2) Alglib (http://www.alglib.net/)

यह पुस्तकालय कई भाषाओं में उपलब्ध है, डेल्फी, C++ और सी # की तरह। मेरा मानना ​​है कि आपके द्वारा सूचीबद्ध किसी अन्य पुस्तकालय की तुलना में इसका इतिहास अधिक लंबा है।

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

3) dnAnalytics (http://dnanalytics.codeplex.com/)

इस पुस्तकालय Math.Net में अब विलय है। ऐसा लगता है कि विलय अभी तक नहीं किया गया है। डीएनए में कुछ फ़ंक्शन अभी भी Math.Net में उपलब्ध नहीं हैं।

4) Math.NET (http://www.mathdotnet.com/) इसके कार्यान्वयन खरोंच से है, यानी, वह LAPACK से प्रत्यक्ष अनुवाद नहीं है। वे नेट प्लेटफॉर्म के लिए पूरी तरह से प्रबंधित लाइब्रेरी प्रदान करना चाहते हैं। इसका मतलब है कि आसान उपयोग और पोर्टेबिलिटी दो प्राथमिक लक्ष्य हैं। एक चिंता यह है कि क्या उनका अपना कार्यान्वयन सही है या नहीं। एक अच्छी बात यह है कि यह लाइब्रेरी इस अर्थ में पोर्टेबल है कि आप इसका उपयोग मोनो, एक्सएनए, विंडोज मोबाइल फोन पर थोड़ा प्रयास के साथ कर सकते हैं।

उपर्युक्त पुस्तकालय 'एफ # पर ध्यान केंद्रित नहीं करते हैं। हालांकि Math.Net में टीम के सदस्यों में से एक एमएस रिसर्च कैम्ब्रिज के लिए काम करता है और एक एफ # विशेषज्ञ है। क्यूडा की तरह, उन्होंने पुस्तकालय के लिए एक एफ # इंटरफ़ेस तैयार किया होगा। इसके अलावा वे देशी रैपर प्रदान करेंगे। लेकिन शायद आप "कई महीनों" से अधिक लंबे समय तक इंतजार करेंगे :)

उच्च प्रदर्शन की चिंता के लिए, उपरोक्त पुस्तकालय देशी रैपर (कम से कम अब) प्रदान नहीं करते हैं। यदि आप देशी प्रदर्शन चाहते हैं + नेट, तो आप एक वाणिज्यिक पुस्तकालय का बेहतर उपयोग कर सकते थे। कुछ ओपन सोर्स समाधान हैं:

1. http://ilnumerics.net/ यह नेट के लिए समाधान की तरह एक बेवकूफ है। वे DLLs LAPACK के लिए PInvoke (netlib पर जैसे गैर अनुकूलित LAPACK, एएमडी और इंटेल। से अनुकूलित संस्करण)

2. एफ # में गणित प्रदाता।this question में मेरा उत्तर पढ़ें। चूंकि एफ # स्रोत कोड अब खुलासा हुआ है। मैं लाइब्रेरी को संशोधित कर सकता हूं और अपने अपडेट जारी कर सकता हूं :)

आमतौर पर आपको एक बड़ी गणित पुस्तकालय की आवश्यकता नहीं होती है। आपको बस कुछ कार्यक्षमता की आवश्यकता है, उदाहरण के लिए, यदि आपको एक फास्ट मैट्रिक्स गुणा प्रक्रिया की आवश्यकता है, तो प्लेटफॉर्म अनुकूलित करने के लिए PInovke का उपयोग करके BLAS dll सबसे आसान तरीका है। यदि आपको बच्चों के लिए शिक्षा उन्मुख गणित सॉफ्टवेयर की आवश्यकता है, तो Math.net की गुणवत्ता पर्याप्त है। यदि आप एक कंपनी में हैं और विश्वसनीय गणित घटकों का विकास कर रहे हैं, तो उच्च गुणवत्ता वाले टीम द्वारा समर्थित वाणिज्यिक का उपयोग क्यों न करें?

एक आदर्श गणित पुस्तकालय ढूँढना मुश्किल है। लेकिन आपकी समस्या के लिए लाइब्रेरी समाधान ढूंढना आम तौर पर आसान होता है।

+0

धन्यवाद, यिन, मुझे उन पुस्तकालयों में आपकी अंतर्दृष्टि के लिए, और सामान्य रूप से गणित पुस्तकालयों पर अपने विचार साझा करने के लिए धन्यवाद। इसके अलावा, Ilnumerics के अतिरिक्त सुझाव के लिए धन्यवाद - मैं उस पुस्तकालय को भी देख लूँगा। मैंने आपके ब्लॉग पर जाकर एफ # ट्यूटोरियल में अपने गणित प्रदाता का अनुसरण करने का प्रयास किया, लेकिन यह मेरे शुरुआती कौशल स्तर से परे था। मुझे बीएलएएस को संकलित करने के लिए मिला है, लेकिन मैं LAPACK को संकलित करने में सफल नहीं हुआ, इसलिए मैंने छोड़ दिया और पुस्तकालयों में अपनी खोज को बदल दिया जो उपयोग करना आसान हो सकता है। वर्तमान में मैं एक छात्र हूं जो मॉडलिंग और सिमुलेशन करने के लिए एफ # का उपयोग करना चाहता है। – Abe

+0

जब मेरे पास कुछ खाली समय है, तो मैं इस पुस्तकालय को सभी आवश्यक रनटाइम जारी कर दूंगा। –

+0

यह अद्भुत यिन होगा! आपकी साइट/ब्लॉग उन लोगों के लिए एक मूल्यवान संसाधन है जो मुझे तकनीकी इरादे के लिए एफ # सीखना पसंद करते हैं।मैं आपकी वेबसाइट पर उस रिलीज (और संभवतः एफ #? * संकेत संकेत * :) से इसके उपयोग पर एक ट्यूटोरियल की तलाश करूंगा)। जो लोग इस धागे का पालन कर रहे हैं उनके लिए - या बाद में ऐसा हो - यिन की साइट यहां है: http://fdatamining.blogspot.com/। लेकिन हां, संकलित डीएलएस उपयोगी होंगे क्योंकि उनका उपयोग करने का एक उदाहरण होगा। आम तौर पर, यदि मैं अनुसरण करने और विश्लेषण करने के लिए कम से कम एक व्यापक उदाहरण है तो मैं चीजों को समझ सकता हूं। एफ # समुदाय, यिन में आपके योगदान के लिए बहुत बहुत धन्यवाद! – Abe

9

F# for Numerics मेरी कंपनी का एक उत्पाद है, जो 100% एफ # में लिखा गया है। हालांकि बुनियादी रेखीय बीजगणित दिनचर्या (विभिन्न मैट्रिक्स/तत्व प्रकार पर Cholesky, लू, QR, SVD) प्रदान की जाती हैं हमारा जोर सामान्य तकनीक (यादृच्छिक संख्या पीढ़ी के लिए FFTs से सब कुछ) और नहीं विशेष रूप से रेखीय बीजगणित पर है और हम विशेष रूप से करने में आसानी में रुचि रखते हैं एफ # से प्रयोग करें।

आप LAPACK से भरा चौड़ाई के बाद कर रहे हैं तो मेरे सिफारिशों Alglib हैं यदि आप एक बजट या Extreme Optimization पर हैं, आप इसे बर्दाश्त कर सकते। Alglib पूरी तरह से एक, umm, "quirky" एपीआई के साथ कोड प्रबंधित किया गया है, तो यह चलाने के लिए अपेक्षाकृत धीमी है और उपयोग करने के लिए बोझिल है। चरम अनुकूलन इंटेल एमकेएल और कुछ अतिरिक्त दिनचर्या को लपेटने वाला एक अच्छा एपीआई है, इसलिए इसका उपयोग करना आसान है और चलाने के लिए बहुत तेज है।

मैं आपको चेतावनी देता चाहिए जो .NET पुस्तकालयों (नि: शुल्क, वाणिज्यिक और भी ढांचा ही) की सामान्य गुणवत्ता अपेक्षाकृत गरीब है अगर आप एक खुला स्रोत पृष्ठभूमि से आ रहे हैं। मैंने आपके द्वारा वर्णित कई अन्य पुस्तकालयों की कोशिश की और उनसे प्रभावित नहीं थे।

+4

क्या आप कुछ सबूत प्रदान कर सकते हैं कि ढांचे को अच्छी तरह लागू या डिजाइन नहीं किया गया है? –

+1

निश्चित रूप से, प्रत्येक प्रकार के प्रत्येक मूल्य पर प्रतिबिंबित करके क्रमशः टाइप और रन-टाइम जनरेटिंग कोड को प्रतिबिंबित करने और इसे पुन: उपयोग करने के बजाय प्रत्येक चरण पर प्रतिबिंबित करके क्रमबद्धता लागू की जाती है। यही वजह है कि सीरियलाइजेशन 170 से अधिक है। ओईसीएल की तुलना में .NET पर धीमा। एफ # टीम के मुताबिक, '[1..1000000] .GetHashCode()' ढेर में एक डिजाइन दोष के कारण ढेर ओवरफ्लो जो आसपास काम नहीं किया जा सकता है। ये हाल ही के कुछ मुद्दे हैं जिन्हें मैंने चलाया है। कुल मिलाकर, मैं कहूंगा कि घटकों के बीच इंटरऑपरेबिलिटी .NET पर बेहतर है लेकिन घटकों की गुणवत्ता स्वयं खराब है। –

+1

एक सहयोगी के मुताबिक, .NET 4 में COM इंटरऑप तारों को लीक करता है। मैंने किसी भी अन्य सिस्टम में .NET 4 में रिपोर्ट की गई एक जीसी बग को गंभीर रूप से कभी नहीं देखा है: http://flyingfrogblog.blogspot.com/2010/10/can-you-repro-this-64-bit- नेट-जीसी-बग.html –

1

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

लेकिन दुर्भाग्य से यह खुला स्रोत, मुक्त नहीं और LAPACK के विपरीत नहीं है, सबसे तरीकों केवल डबल परिशुद्धता चल बिन्दु reals का समर्थन करता है। और कुछ दुर्लभ रूप से उपयोग किए जाने वाले LAPACK विधियों के लिए उपलब्ध नहीं हैं।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^