ndarray Rust: N-डायमेंशनल ऐरे के साथ काम करने की पूरी गाइड
1. ndarray क्या है और इसकी आवश्यकता क्यों है?
ndarray लाइब्रेरी Rust इकोसिस्टम में मल्टी-डायमेंशनल ऐरे (N-डायमेंशनल टेंसर) के साथ काम करने का एक मानक एक्सटेंशन है। यह संख्यात्मक गणना, लीनियर अलजेब्रा, सिग्नल प्रोसेसिंग, मशीन लर्निंग और वैज्ञानिक गणनाओं के लिए शक्तिशाली, टाइप-सेफ और परफॉर्मेंट डेटा स्ट्रक्चर प्रदान करता है। अगर आप Python में NumPy से परिचित हैं, तो ndarray Rust की दुनिया में इसका सीधा एनालॉग है, लेकिन इसमें सख्त टाइपिंग, गार्बेज कलेक्टर की अनुपस्थिति और मेमोरी पर नियंत्रण के फायदे हैं।
इसकी आवश्यकता क्यों है? Rust में मनमानी संख्या में अक्षों वाले मल्टी-डायमेंशनल ऐरे के लिए कोई बिल्ट-इन सपोर्ट नहीं है। स्टैंडर्ड वेक्टर (Vec<T>) और स्लाइस (&[T]) केवल एक-डायमेंशनल डेटा के साथ काम कर सकते हैं। मैट्रिक्स अलजेब्रा, कन्वोल्यूशन, टेंसर ऑपरेशन या इमेज प्रोसेसिंग जैसे कार्यों के लिए एक विशेष लाइब्रेरी की आवश्यकता होती है। ndarray इन समस्याओं को हल करता है और प्रदान करता है:
- टाइप किए गए N-डायमेंशनल ऐरे (
ArrayBase) जिनमें निश्चित या डायनामिक संख्या में अक्ष होते हैं। - कुशल स्लाइसिंग, इंडेक्सिंग और इटरेशन।
- वेक्टराइज्ड अरिथमेटिक ऑपरेशन (ब्रॉडकास्टिंग)।
- हाई-परफॉर्मेंस लीनियर अलजेब्रा गणनाओं के लिए
ndarray-linalgके माध्यम से BLAS/LAPACK के साथ इंटीग्रेशन। rayonके माध्यम से पैरेलल कंप्यूटेशन का सपोर्ट।
इस लाइब्रेरी का उपयोग RustML, Linfa (मशीन लर्निंग फ्रेमवर्क), Image (इमेज प्रोसेसिंग) और कई अन्य प्रोजेक्ट्स में सक्रिय रूप से किया जाता है। यह Rust में वैज्ञानिक गणनाओं की नींव है।
2. इंस्टॉलेशन
ndarray को इंस्टॉल करने के लिए Rust के पैकेज मैनेजर Cargo का उपयोग करें। अपने प्रोजेक्ट के Cargo.toml फ़ाइल में डिपेंडेंसी जोड़ें:
[dependencies]
ndarray = "0.16"
फिर टर्मिनल में निम्न कमांड चलाएँ:
cargo build
लीनियर अलजेब्रा (मैट्रिक्स गुणा, आइगनवैल्यू) के लिए ndarray-linalg जोड़ें और BLAS बैकएंड (जैसे OpenBLAS या Intel MKL) चुनें:
[dependencies]
ndarray = "0.16"
ndarray-linalg = { version = "0.16", features = ["openblas"] }
पैरेलल इटरेशन के लिए ndarray-parallel का उपयोग करें:
[dependencies]
ndarray = "0.16"
ndarray-parallel = "0.16"
3. त्वरित शुरुआत — एक न्यूनतम कार्यशील उदाहरण
एक-डायमेंशनल ऐरे बनाएँ, एलिमेंट-वाइज जोड़ करें और परिणाम प्रिंट करें। निम्न कोड को src/main.rs फ़ाइल में सेव करें:
use ndarray::Array;
fn main() {
// 5 एलिमेंट का एक-डायमेंशनल ऐरे बनाएँ
let a = Array::from_vec(vec![1, 2, 3, 4, 5]);
let b = Array::from_vec(vec![10, 20, 30, 40, 50]);
// एलिमेंट-वाइज जोड़
let c = &a + &b;
println!("a = {:?}", a);
println!("b = {:?}", b);
println!("a + b = {:?}", c);
}
प्रोग्राम चलाएँ:
cargo run
आउटपुट:
a = [1, 2, 3, 4, 5], shape=[5], strides=[1], layout=CFcf (0x1)
b = [10, 20, 30, 40, 50], shape=[5], strides=[1], layout=CFcf (0x1)
a + b = [11, 22, 33, 44, 55], shape=[5], strides=[1], layout=CFcf (0x1)
4. मुख्य तरीके और फंक्शन (कम से कम 8)
4.1. Array::from_shape_vec
सिग्नेचर: pub f