2009-11-04 14 views
7

क्लोजर में matrices के लिए एक अच्छा प्रतिनिधित्व क्या है? मुझे फ्लोटिंग पॉइंट नंबरों के घने मैट्रिस से निपटने में दिलचस्पी है। "सूचियों की सूची" प्रतिनिधित्व स्प्रिंग्स दिमाग में है, लेकिन क्या कुछ बेहतर है?क्लोजर मैट्रिक्स प्रतिनिधित्व

एक अच्छा प्रतिनिधित्व के लिए कुछ मापदंड में शामिल हैं:

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

कोई विचार?

+0

संचालन किस तरह आप इन मैट्रिक्स के साथ क्या करना चाहते हैं के लिए अनुकूलित है पाया? सूचियों की सूची के रूप में उनका प्रतिनिधित्व करना कुछ परिचालनों के लिए एक सभ्य विकल्प होगा, लेकिन यदि आपको अक्सर सरणी के आर्बिट्रेय तत्वों तक पहुंचने की आवश्यकता होती है तो यह आपको मृत कर देगा। – Pillsy

उत्तर

10

Incanter सहित क्या की तेजी, घने मैट्रिक्स parallelized एक बहुत सभ्य कार्यान्वयन होना करने के लिए लग रहा है Parallel Colt में से कुछ का आवरण की आपूर्ति, Clojure के seq आधारित पुस्तकालयों के साथ कि इंटरफ़ेस। मैंने इसका इस्तेमाल नहीं किया है, लेकिन यह वही होना चाहिए जो आप खोज रहे हैं।

Example

+1

नोट: यह उत्तर अब काफी पुराना है। इंकेंटर अब क्लैट्रिक्स का उपयोग करता है, और नए उन्नत मैट्रिक्स कार्यान्वयन उपलब्ध हैं (देखें 'कोर.मैट्रिक्स' और इसके विभिन्न कार्यान्वयन जैसे' वेक्टरज़-क्लज'। – mikera

-1

मैं कोई विशेषज्ञ हूँ, लेकिन यहाँ मेरी राय वैसे भी :)

सूची के- सूचियों शायद मैट्रिक्स का प्रतिनिधित्व करने के लिए सबसे अधिक प्राकृतिक Clojure मुहावरा है। यह संरचना संचालन के प्रकारों को मानचित्र/कम करने के लिए खुद को अच्छी तरह से उधार देती है। क्लोजर अनुक्रमों को संभालने में भी बहुत ही कुशल है - शायद अधिकतर विकल्पों की तुलना में बेहतर है।

मैं इस पर कसम खाता नहीं हूं, लेकिन मुझे लगता है कि मैंने क्लोजर 3 या मेरे सभी CPUs को काम करने वाले कार्यक्रमों पर कड़ी मेहनत की है जो मैंने लिखा था कि शैली में कार्यात्मक थे लेकिन समानांतर होने का कोई प्रयास नहीं किया। मुझे संदेह है कि कंपाइलर अपने आप पर समानांतर प्रसंस्करण के लिए कुछ अवसर ढूंढ रहा है।

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

सूचियों को अनुक्रमिक रूप से सबसे अच्छी तरह से एक्सेस किया जाता है। यदि आप मैट्रिक्स में बहुत कुछ कूदने की योजना बना रहे हैं, तो वेक्टर-ऑफ-वेक्टर आपको थोड़ा बेहतर प्रदर्शन कर सकते हैं। मुझे संदेह है कि एनएच फ़ंक्शन का उपयोग करके धड़कता है।

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

2

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

0

रिच हिकी का क्लोजर एक जेवीएम-आधारित लिस्प है जो 32-तरफा पेड़ के साथ पर्सिस्टेंट वेक्टर (पर्सिस्टेंटलिस्ट नहीं) का प्रतिनिधित्व करता है।

यदि आप अपना खुद का मैट्रिक्स टाइप लिखना चाहते हैं तो मैं PersistentVector का उपयोग करता हूं अन्यथा सबसे अच्छा विकल्प इंकेंटर के साथ समानांतर कोल्ट का उपयोग करना है।

5

मैं मैट्रिक्स लाइब्रेरी रैपिंग jblas लिख रहा हूं, जिसे क्लाटेरिक्स कहा जाता है। इसमें बहुत सी फीचर्स गायब हैं जिन्हें मैं अभी भी जोड़ना चाहता हूं, लेकिन जो कुछ आप खोज रहे हैं, उसे प्राप्त किया गया है। एक नज़र डालें, http://github.com/tel/clatrix

0

मैंने हाल ही में कुछ कोड लिखा है जिसके लिए मैट्रिक्स गणित की आवश्यकता है, और शुरुआत में मैंने वेक्टर-ऑफ-वैक्टर का उपयोग किया, मानचित्र & कम किया, लेकिन परिणामस्वरूप कोड को समझने में कठिनाई हुई जब मैं इसे वापस लौटा (मैं क्लोजर दिमाग में नया हूं) । Incanter एक ही कोड बहुत terse, समझने में आसान (मानक मैट्रिक्स ओप) और बहुत तेज़ बना दिया।

4

चेक बाहर core.matrix प्रस्ताव + यहाँ प्रयोगात्मक कार्यान्वयन:

https://github.com/mikera/matrix-api

लेखन के समय बहुत शुरुआती दिनों, लेकिन पर नजर रखने के लायक।

+2

मार्च 2014 तक, मैंने इसे एक व्यापक व्यापक सरणी प्रोग्रामिंग सिस्टम में विकसित किया है 'core.matrix' कहा जाता है – mikera

0

उत्तरों को 8 साल बीतने के बाद अपडेट करने की आवश्यकता हो सकती है। एक त्वरित Google खोज से पता चलता है कि यदि आपको क्लोजर कोर.मैट्रिक्स एपीआई के साथ संगत होने की आवश्यकता है, तो आप कोर.मैट्रिक्स स्वयं या वेक्टरज़-क्लज जैसे अन्य कार्यान्वयन का उपयोग कर सकते हैं।

इसके अलावा मैं Neanderthal जो GPU