मैं अपने अनुप्रयोग है कि बहुत काम करता है और सबसे गणना समय पर है में एक बहुत ही सरल कार्य है:स्पीड अप Data.Array पंक्ति निष्कर्षण और छानने
f :: Int -> Array (Int,Int) Int -> [Int]
f x arr = [v | v <- range (l,u), vv <- [g!(x,v)], vv /= 0]
where ((_,l), (_,u)) = bounds arr
क्या करता है: में एक पंक्ति को निकालने इंडेक्स x
सरणी arr
से और \= 0
तत्वों के साथ सभी कॉलम इंडेक्स लौटाएं।
arr = [[0, 0, 5],
[4, 0, 3],
[0, 3, 1]] -- for simplicity in [[a]] notation
उम्मीद उत्पादन
f 0 arr == [2]
f 1 arr == [0,2]
f 2 arr == [1,2]
है मैं कैसे f
में तेजी लाने करते हैं और अधिक विस्तार के साथ प्रोफाइल क्या वास्तव में गणना समय के सबसे लेता है: तो, उदाहरण के लिए, सीमा ((0,0),(2,2))
साथ निम्नलिखित मैट्रिक्स दिया एफ में (सूची निर्माण, सरणी का उपयोग, आदि)?
धन्यवाद! यह arr
होना चाहिए
मैंने अभी पुस्तकालयों के स्रोत की जांच की है और 'रेंज'' [..] 'जैसा ही होना चाहिए। – sclv
@ एससीएलवी हां, यह वही है। हालांकि यह एक और परत है जिसे संकलक को छीलना पड़ता है। 'Int' के साथ कोई समस्या नहीं होनी चाहिए, लेकिन अन्य प्रकार के लिए हो सकती है। –
आपकी टिप्पणी के लिए धन्यवाद। इससे वास्तव में काफी मदद मिली और मुझे लगता है कि समस्या सूची का निर्माण है। अंत में मुझे जो चाहिए वह सूची में एक गुना है, इसलिए कॉलर में सीधे सरणी पर गुना करना बेहतर हो सकता है। – bbtrb