मुझे यकीन नहीं है कि आप क्या चाहते हैं, लेकिन मैं समझाने की कोशिश करूंगा।
आप अपने कोड में डबल और फ्लोट मिश्रण कर रहे हैं (एक मैट्रिक्सएक्स एक मैट्रिक्स है जहां प्रत्येक प्रविष्टि एक फ्लोट है)। मैं इस पल के लिए मान लेगा कि यह अनजान एमडी था कि आप हर जगह डबल का उपयोग करना चाहते हैं; अगर यह वास्तव में आपका इरादा था तो नीचे देखें।
निर्देश Map<MatrixXd>(arrayd, n, n) = matrix
matrix
की प्रविष्टियों को arrayd
में कॉपी करता है। matrix = Map<MatrixXd>(arrayd, n, n)
: यह पाश
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
arrayd[i + j*n] = matrix(i, j);
matrix
में arrayd
की प्रविष्टियों को कॉपी करने के लिए बराबर है, तो आप उलटा काम का प्रयोग करेंगे।
हालांकि, आमतौर पर निम्नलिखित तकनीक अधिक उपयोगी है:
void foo(MatrixXd matrix, int n) {
double* arrayd = matrix.data();
// do something with the array
}
मैट्रिक्स में प्रविष्टियों के लिए अब arrayd अंक और आप किसी भी सी ++ सरणी के रूप में यह संसाधित कर सकें। डेटा को matrix
और arrayd
के बीच साझा किया गया है, इसलिए आपको अंत में कुछ भी वापस कॉपी करने की आवश्यकता नहीं है। संयोग से, आपको फ़ंक्शन foo()
पर पास करने की आवश्यकता नहीं है, क्योंकि यह मैट्रिक्स में संग्रहीत है; इसके मान पूछने के लिए matrix.rows() और matrix.cols() का उपयोग करें।
यदि आप एक मैट्रिक्सएक्सएफ को युगल की सरणी में कॉपी करना चाहते हैं, तो आपको स्पष्ट रूप से कास्ट शामिल करना होगा। इसके लिए ईजिन में वाक्यविन्यास है: Map<MatrixXd>(arrayd, n, n) = matrix.cast<double>()
।
स्रोत
2012-08-17 14:33:37
यह मानचित्र <> फ़ंक्शन क्या है? क्या आप इसे दिखा सकते हैं? –
यह सब मुझे पता है http://eigen.tuxfamily.org/dox/TutorialMapClass.html – Manolete