2011-10-20 9 views
7

मैं बस रूबी के लिए एनएआरए लाइब्रेरी में आया - कृपया इस सवाल पूछते समय मेरी अज्ञानता से क्षमा करें :)ऐरे पर रुबी नायर्रे का उपयोग करने के क्या फायदे हैं?

मानक रूबी ऐरे कार्यान्वयन पर NArray लाइब्रेरी का उपयोग करने के क्या फायदे हैं?

मैंने देखा है कि नैन्रे संख्यात्मक कंप्यूटिंग की दिशा में तैयार है, लेकिन एपीआई को देखते हुए, ऐसा लगता है कि संख्यात्मक मूल्यों की दिशा में ऐरे पर केवल कुछ एक्सटेंशन हैं - कुछ भी नहीं जो आप ऐरे के साथ नहीं कर सकते ..

  1. क्यों न केवल ऐरे का उपयोग करें?
  2. क्या कोई बड़ा गति लाभ है?
  3. क्या कोई बड़ी स्मृति लाभ है?
  4. नियमित रूबी ऐरे कक्षा का उपयोग करने पर कोई अन्य लाभ?

Google वास्तव में इस प्रश्न के उपयोगी स्पष्टीकरण के साथ नहीं आया था।

संदर्भ मैंने पाया:

http://rubydoc.info/gems/narray-ruby19/0.5.9.7/NArray

http://narray.rubyforge.org/index.html.en

http://raa.ruby-lang.org/project/narray/

+0

वहाँ रूबी में संख्यात्मक सरणियों के लिए एक अद्यतन पुस्तकालय कर सकते हैं कि कहा जाता है [NMatrix] (https://github.com/sciruby/nmatrix) उपयोगी होना। : पी – agarie

उत्तर

10

भी देखें NArray के बारे में स्लाइड: http://www.slideshare.net/masa16tanaka/narray-and-scientific-computing-with-ruby

यह कैसा दिखता ऐरे

पर केवल कुछ एक्सटेंशन हैं, नहीं, यह ऐरे से बिल्कुल अलग है। NArray में कई संख्यात्मक कार्य और बहु-आयामी विशेषताएं हैं। दूसरी ओर, NArray स्थिर है; यह धक्का/पॉप तरीकों, आदि नहीं है NArray की विधि सूची http://narray.rubyforge.org/SPEC.en

_1 है। क्यों न केवल ऐरे का उपयोग करें?

ऐरे रूबी ऑब्जेक्ट्स रखती है। यह संख्यात्मक मूल्यों को पकड़ने में अक्षम है।

_2। क्या कोई बड़ा गति लाभ है?

हां। उपर्युक्त स्लाइड के p.36 से पता चलता है कि NArray 50 गुना तेज है।

ध्यान दें कि रूबी में लूप लिखा गया है तो ऐरे नेरे से तेज है।

_3। क्या कोई बड़ी स्मृति लाभ है?

हां। फ्लोट वैल्यू के लिए, ऐरे मेरी 64 बिट लिनक्स मशीन पर नेरे के मुकाबले लगभग 4 गुना अधिक स्मृति का उपभोग करता है।

_4। नियमित रूबी ऐरे कक्षा का उपयोग करने पर कोई अन्य लाभ?

  • के संख्यात्मक कार्यों
  • सरणी वस्तुओं पर कचरा संग्रहण के लिए कोई ज़रूरत नहीं के बहु-आयामी सरणी
  • समर्थन समर्थन। जीसी बड़े Arrays के लिए बड़ा समय लेता है।
  • आदि
+0

+1 विस्तृत उत्तर के लिए धन्यवाद! डोमो! – Tilo

4

मैंने देखा है कि NArray संख्यात्मक कंप्यूटिंग की दिशा में सक्षम है, लेकिन एपीआई को देखते हुए ऐसा लगता है कि केवल सरणी के ऊपर कुछ एक्सटेंशन संख्यात्मक मानों की दिशा में सक्षम नहीं हैं - कुछ भी नहीं है कि आप .. सरणी के साथ कर सकता नहीं

आप सबसे महत्वपूर्ण बात याद कर रहे हैं: NArray सिर्फ संख्यात्मक प्रसंस्करण के लिए विस्तारित नहीं किया है, यह भी है प्रतिबंधित। विशेष रूप से

  • NArray तत्वों कर सकते हैं केवल जा निश्चित-आकार पूर्णांक या तैरता
  • NArray खुद को है भी निश्चित-आकार, वे हटना नहीं कर सकते हैं कर रहे हैं या बढ़ने

NArrayकर सकते हैं का एक कार्यान्वयन बेहतर प्रदर्शन प्रदान करने के लिए उन प्रतिबंधों का शोषण करें।

+0

+1 आह, मैं देखता हूं। वीएलन डंक! – Tilo

1

बड़े टाइप किए गए सरणी निर्माण के लिए NArray तेज हो सकता है, हालांकि छोटे सरणी निर्माण (उदाहरण के लिए अस्थायी मध्यवर्ती वस्तुओं के लिए) रूबी ऐरे तेजी से प्रतीत होता है।

बेंचमार्क कोड:

require 'benchmark' 

n1 = 1000000 
n2 = 10000 
Benchmark.bm do |x| 
    x.report("NArray short float length 5:") { n1.times { NArray.sfloat(5) } } 
    x.report("NArray long float length 5 :") { n1.times { NArray.float(5) } } 
    x.report("NArray short int length 5 :") { n1.times { NArray.sint(5) } } 
    x.report("NArray long int length 5 :") { n1.times { NArray.int(5) } } 
    x.report("NArray object length 5  :") { n1.times { NArray.object(5) } } 
    x.report("Ruby Array length 5  :") { n1.times { Array.new(5) } } 

    x.report("NArray short float length 10000:") { n2.times { NArray.sfloat(10000) } } 
    x.report("NArray long float length 10000 :") { n2.times { NArray.float(10000) } } 
    x.report("NArray short int length 10000 :") { n2.times { NArray.sint(10000) } } 
    x.report("NArray long int length 10000 :") { n2.times { NArray.int(10000) } } 
    x.report("NArray object length 10000  :") { n2.times { NArray.object(10000) } } 
    x.report("Ruby Array length 10000  :") { n2.times { Array.new(10000) } } 
end 

परिणाम:

       user  system  total  real 
NArray short float length 5: 0.740000 0.020000 0.760000 ( 0.756466) 
NArray long float length 5 : 0.770000 0.020000 0.790000 ( 0.791446) 
NArray short int length 5 : 0.750000 0.020000 0.770000 ( 0.772591) 
NArray long int length 5 : 0.760000 0.020000 0.780000 ( 0.777375) 
NArray object length 5  : 0.780000 0.020000 0.800000 ( 0.801149) 
Ruby Array length 5  : 0.450000 0.010000 0.460000 ( 0.461501) <==== 
NArray short float length 10000: 0.230000 0.050000 0.280000 ( 0.281369) 
NArray long float length 10000 : 0.430000 0.000000 0.430000 ( 0.428917) 
NArray short int length 10000 : 0.110000 0.010000 0.120000 ( 0.113683) 
NArray long int length 10000 : 0.230000 0.040000 0.270000 ( 0.275942) 
NArray object length 10000  : 0.460000 0.110000 0.570000 ( 0.570558) 
Ruby Array length 10000  : 0.440000 0.040000 0.480000 ( 0.476690) 
संबंधित मुद्दे