2013-06-28 4 views
6

मेरे पास पूर्णांक का वेक्टर है और मैं मैट्रिक्स की विकर्ण प्रविष्टियों के रूप में वेक्टोस के तत्व के साथ एक विकर्ण मैट्रिक्स बनाना चाहता हूं। उदाहरण के लिए: यदि वेक्टर 1 2 3 है विकर्ण मैट्रिक्स होगा:पूर्णांक के वेक्टर से एक विकर्ण मैट्रिक्स का निर्माण: फ़ंक्शन ईजिन

1 0 0 
0 2 0 
0 0 3 

यह करने के लिए किया जाएगा अनुभवहीन रास्ता सिर्फ इस पर पुनरावृति और एक एक करके तत्वों एक निर्धारित किया है। eigen में ऐसा करने का कोई अन्य प्रत्यक्ष तरीका नहीं है। विकर्ण बनाने के बाद भी मैं उलटा गणना करना चाहता हूं (जो केवल विकर्ण प्रविष्टियों को उलट रहा है) लेकिन पुस्तकालय में भी ऐसा करने का कोई तरीका नहीं है (सीधे, जिसे अनुकूलित भी किया जाएगा)।

मैंने eigen लाइब्रेरी में diagonal matrices के प्रलेखन को देखा है, लेकिन ऐसा लगता है कि ऐसा कोई रास्ता नहीं है। अगर दस्तावेज पढ़ने के दौरान मुझे कुछ स्पष्ट याद आया है तो कृपया बताएं।

किसी भी मदद की सराहना की।

+0

यदि आपको वेक्टर से मैट्रिक्स को जल्दी से उत्पन्न करने का कोई तरीका मिलता है, तो इसे परिवर्तित करना सरल है: वेक्टर के तत्वों को घुमाएं और स्क्रैच से मैट्रिक्स बनाएं। – arne

+0

@arne अगर वे उभर सकते हैं (मुझे यकीन नहीं है) फ्लोटिंग पॉइंट त्रुटियों में नहीं जाना चाहता था। तो सब कुछ संभालने के लिए ईजिन चाहते हैं। मैंने अनुमान लगाया कि यह आसान होगा। –

+0

आपके द्वारा लिंक किया गया पृष्ठ 3 डी गुणांक के रूप में 3 प्रासंगिक गुणांक लेने वाले 3 डी 'डायगोनामैट्रिक्स' कन्स्ट्रक्टर प्रदान करता है। ऐसे मैट्रिक्स से विकर्ण वेक्टर निकालने का एक तरीका भी है, जिसे आप उलटा वेक्टर "हाथ से" गणना करने और साथ एक नया मैट्रिक्स बनाने के लिए उपयोग कर सकते हैं। – didierc

उत्तर

10

this part of the documentation के अनुसार आप काफी कुछ विकल्प, सबसे आसान एक होने

auto mat = vec.asDiagonal(); 
+0

सही दस्तावेज कभी-कभी खोजने के लिए मुश्किल हो सकता है। मैंने Google खोज की लेकिन यह दिखाई नहीं दिया। यह अजीब लग सकता है लेकिन किसी भी चाल/सुझाव? –

+0

मैंने वेक्टर ईजिन से क्वेरी 'विकर्ण मैट्रिक्स' का उपयोग किया, इसलिए यहां कोई असली चाल नहीं है :) – filmor

+0

दस्तावेज़ीकरण लिंक मर चुका है। – Cecilia

1

आप Eigen के साथ उचित प्रकार का उपयोग करना चाहिए, जब तक आप वास्तव में नहीं पता है कि तुम क्या

//Create a 4x4 diagonal matrix from the vector [ 5 6 7 8 ] 
Eigen::Vector4d vec; 
vec << 5, 6, 7, 8; 
Eigen::DiagonalMatrix<double, 4> mat = vec.asDiagonal(); 

कर रहे हैं का उपयोग करना है ऑटो वास्तव में एक फिसलन ढलान है जहां आपको आमतौर पर यह नहीं पता कि कंपाइलर किस प्रकार के रूप में उपयोग करता है, और ईजिन के साथ मिलकर, यह मुश्किल-से-खोजने त्रुटियों के सामान्य स्रोतों में से एक है (https://eigen.tuxfamily.org/dox/TopicPitfalls.html देखें)

संबंधित मुद्दे