2014-04-05 7 views
6

MATLAB, नीचे दी गई रेखा एक मैट्रिक्स को वेक्टर में परिवर्तित करती है। यह कॉलर द्वारा मैट्रिक्स कॉलम को वेक्टर में फ़्लैट करता है।ईजिन कनवर्ट मैट्रिक्स वेक्टर

myvar(:) 

मैं ईजिन के साथ ऐसा कैसे कर सकता हूं? समाधान मैट्रिक्स के किसी भी आयाम के लिए काम करना चाहिए।

MatrixXd A(3,2); 
VectorXd B(6); 
A << 1,2,3,4,5,6; 
B << A.col(0), A.col(1); 
//This isn't general enough to work on any size Matrix 
+0

myVar होगा (:) एक मैट्रिक्स ** स्तंभ लेता ** बुद्धिमान एक और इसे एक वेक्टर में रखता है, पंक्ति-वार नहीं। – rayryeng

+0

हाँ धन्यवाद, मैंने अपना प्रश्न अपडेट किया। – user3501255

उत्तर

9

Eigen मैट्रिक्स डिफ़ॉल्ट रूप से स्तंभ प्रमुख क्रम में जमा हो जाती है, तो आप बस का उपयोग कर सकते एक सरणी में डेटा स्टोर करने के लिए स्तंभ Eigen नक्शे का उपयोग स्तंभ द्वारा:

MatrixXd A(3,2); 
A << 1,2,3,4,5,6; 
VectorXd B(Map<VectorXd>(A.data(), A.cols()*A.rows())); 

यदि आप चाहते हैं डेटा का आदेश दिया पंक्ति दर पंक्ति, आपको पहले मैट्रिक्स स्थानांतरित करने के लिए की जरूरत है:

MatrixXd A(3,2); 
A << 1,2,3,4,5,6; 
A.transposeInPlace(); 
VectorXd B(Map<VectorXd>(A.data(), A.cols()*A.rows())); 
0

यह करने के लिए एक और तरीका है:

... 
VectorXd B = A; 
B.resize(B.cols()*B.rows(), 1); 

या, आप पंक्ति क्रम में वेक्टर चाहते हैं:

... 
VectorXd B = A.transpose(); 
B.resize(B.cols()*B.rows(), 1); 

सादर।

+1

'वेक्टर' में 'मैट्रिक्स' असाइन करना विफल होना बाध्य है। – YvesgereY

1

आप एक नया चर को परिभाषित करने के बिना मैट्रिक्स मूल्यों को बदल करना चाहते हैं, तो आप

Eigen::MatrixXd A(2,3); 
A.data()[3] = 1.2 
इस मामले डेटा में

(उपयोग कर सकते हैं) [3] सूचकांक के अनुरूप होगा एक [1,1] मैट्रिक्स के, या पढ़ा उन्हें

double value = A.data()[5]; 

से इसलिए यदि मैं पूरी 2by3 मैट्रिक्स लिख ऐसा

A.data()[0]  A.data()[2] A.data()[4] 
A.data()[1]  A.data()[3] A.data()[5] 
संबंधित मुद्दे