आपकी सरणी का प्रतिनिधित्व वास्तव में इसे उपयोग करने की आवश्यकता पर निर्भर करता है, इसे प्रारंभ नहीं करता है। उदाहरण के लिए, यदि आप घने मैट्रिक्स है, तो आप सबसे शायद वैक्टर की वेक्टर इस तरह उपयोग करना चाहिए:
[[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9],
[9, 8, 7, 6, 5],
[4, 3, 2, 1, 0],
[0, 1, 2, 3, 4]]
या कच्चे लंबाई पर कुछ अतिरिक्त जानकारी के साथ एकल वेक्टर:
{:length 5
:data
[0, 1, 2, 3, 4,
5, 6, 7, 8, 9,
9, 8, 7, 6, 5,
4, 3, 2, 1, 0,
0, 1, 2, 3, 4]
}
और यदि आप विरल जरूरत मैट्रिक्स, आप hash-map
s का उपयोग कर सकते हैं:
{0 {0 0, 4 4},
2 {2 7},
3 {0 4, 2 2}}
(के बाद से अपने 2 डी सरणी छोटा है और आप पिछले एक के आधार पर अगले मूल्य उत्पन्न करते हैं, मेरा मानना है कि पहले विकल्प बेहतर सूट है आपके लिए डी)।
यदि आप बहुत सारे मैट्रिक्स-विशिष्ट मैनिप्लेशंस (गुणा, अपघटन, आदि) बनाने जा रहे हैं तो आप Incanter जैसे कुछ मौजूदा पुस्तकालयों का उपयोग करना चाह सकते हैं।
और भरने के लिए के रूप में, मेरे प्रस्ताव transients का उपयोग करें और अंतरिम परिणामों, यानी (एक आयामी वेक्टर के लिए) स्टोर करने के लिए है:
(defn make-array [initial-value f length]
(loop [result (transient []), length-left length, interim-value initial-value]
(if (= length-left 0)
(persistent! result)
(recur (conj! result (f interim-value)) (- length-left 1) (f interim-value))))
यात्रियों प्रत्येक नए तत्व पर नया डेटा संरचना बनाने से बचना होगा, और अंतरिम मूल्य क्षणिक संरचना से पिछले तत्व को पढ़ने में आवश्यकता से बच जाएगा।
क्या आप एक उदाहरण "सरणी" जोड़ सकते हैं (संभवतः क्लोजर वेक्टर अधिक उपयुक्त होगा) जो दिखाता है कि आप अपने कार्यों को कैसे लागू करना चाहते हैं? 0,0 के आधार पर 0,1 पर कुछ करने का मतलब है कि आप केवल एक एकल आयामी सरणी से बड़े 2 डी के भीतर काम करते हैं; क्या आपका मतलब 0,0 1,0 इत्यादि को प्रभावित करेगा? – semperos
इसकी एक 5x5 सरणी, प्रत्येक सेल के मान के साथ पिछले सेल के साथ गणना की जाती है। पहले सेल (0,0) में मान 1 है। (0,1) पर सेल में f (x) -> y (x 0 की सामग्री है) का मान है। सभी कोशिकाओं के पास उनके मूल्य उत्पन्न करने के लिए समान कार्य नहीं होता है, लेकिन सभी कार्यों में एक एकल पैरामीटर होता है, जो पहले प्रारंभिक सेल का मान होता है। – JPT
'@' का उपयोग करना न भूलें, इसलिए आप जिस व्यक्ति को संबोधित करते हैं, वह आपकी टिप्पणी के बारे में अधिसूचित हो जाता है। –
ffriend