2010-06-13 16 views
5

के साथ प्रदर्शन समस्या कोड का यह टुकड़ा बहुत धीमा है। मेरी नेटबुक पर कीचड़-प्रतिलिपि से निष्पादन में कुछ मिनट लगते हैं।क्लोजर ऐरे

(def test-array (make-array Integer/TYPE 400 400 3)) 

(doseq [x (range 400), y (range 400), z (range 3)] 
    (aset test-array x y z 0)) 

इसके विपरीत, इस कोड को वास्तव में तेज़ी से चलता है:

(def max-one (apply max (map (fn [w] (apply max (map #(first %) w))) test-array))) 
(def max-two (apply max (map (fn [w] (apply max (map #(second %) w))) test-array))) 
(def max-three (apply max (map (fn [w] (apply max (map #(last %) w))) test-array))) 

इस chunked दृश्यों के साथ कुछ है? क्या मेरा पहला उदाहरण सिर्फ गलत लिखा गया है?

उत्तर

7

आप जावा प्रतिबिंब मार रहे हैं। at clojars, at github:

http://clj-me.cgrand.net/2009/10/15/multidim-arrays/

+0

लिंक के लिए धन्यवाद। मैंने सोचा कि यह प्रतिबिंब हो सकता है, लेकिन मुझे कोई प्रतिबिंब चेतावनी नहीं मिल रही है? कोई विचार क्यों नहीं? – dbyrne

+2

स्पष्ट रूप से '* चेतावनी-प्रति-प्रतिबिंब * हमेशा पूरी कहानी नहीं बताता है ... यह भी देखें http://clj-me.cgrand.net/2009/08/06/what-warn-on-reflection- क्लोजर 1.2 के साथ आपको बताए गए एरे/ –

+0

आपको एरे पर अधिक प्रतिबिंब चेतावनियां मिलनी चाहिए। – cgrand

0

आप चार Clojure मैट्रिक्स एकल इंटरफेस core.matrix के माध्यम से उपलब्ध कार्यान्वयन में से एक से बेहतर प्रदर्शन प्राप्त हो सकता है: इस ब्लॉग पोस्ट एक समाधान है।