पर एक ईजिन मैट्रिक्स मानचित्र करें मैंने हाल ही में Eigen लाइब्रेरी का उपयोग करना शुरू कर दिया है। मुझे एक सी/सी ++ सरणी में एक ईजिन मैट्रिक्स मैपिंग का सवाल मिला। एक ईजिन मैट्रिक्स डिफ़ॉल्ट रूप से कॉलम महारत हासिल है। तो अगर मैं एक C/C++ सरणी के लिए एक मैट्रिक्स मैप करने के लिए,एक सी एरे
double a[10];
double *p = &a[0];
MatrixXd(2,5) m;
for (int i=0; i<2;i++)
for (int j=0; j<5;j++)
m(i,j) = i+j;
cout<<m<<endl;
Eigen::Map<MatrixXd>(p,2,5) = m;
for (int i=0; i<10; i++)
cout<<a[i]<<" ";
cout<<endl;
उत्पादन होता है निम्नलिखित कोड का उपयोग करें:
0 1 2 3 4
1 2 3 4 5
0 1 1 2 2 3 3 4 4 5
अगर मैं मीटर की परिभाषा बदलने के रूप में पंक्ति majored:
Matrix <double,2,5,RowMajor> m;
मैं उम्मीद उत्पादन इस तरह दिखता है:
0 1 2 3 4
1 2 3 4 5
0 1 2 3 4 1 2 3 4 5
लेकिन असल में परिणाम अभी भी पहले जैसा ही था। मेरा सवाल यह है कि एक ईजिन मैट्रिक्स को सी/सी ++ सरणी में मैप करने का कोई तरीका है ताकि सरणी का डेटा पंक्ति आधारित हो?
मैंने पाया कि मैं वांछित परिणाम प्राप्त करने के लिए matrix.data() memember समारोह का उपयोग कर सकते हैं, लेकिन मैं सोच रहा हूँ कि क्या मैं इस प्रयोग के नक्शे कर सकते हैं:
उपयोग matrix.data() काम करता है:
double a[10];
double *p = &a[0];
Matrix <double,2,5,RowMajor> m;
for (int i=0; i<2;i++)
for (int j=0; j<5;j++)
m(i,j) = i+j;
double *p1 = m.data();
for (int i=0; i<10; i++)
cout<<p1[i]<<" ";
cout<<endl;
यह काम करता है। धन्यवाद। – Rainfield