मान लें कि mat
नीचे Eigen::MatrixXd
प्रकार है और इसमें पहले से ही कुछ डेटा है। डुप्लिकेट स्मृति से बचने के प्रयास में, मैं कच्चे स्मृति हिस्सा Eigen3 द्वारा आवंटित करने के लिए सूचक से एक flann::Matrix<double>
वस्तु का दृष्टांत करने की कोशिश की:ईजिन :: MatrixXd flann :: मैट्रिक्स <double> रूपांतरण
flann::Matrix<double> input(const_cast<double *>(mat.data(), mat.rows(), mat.cols())
लेकिन, मेरा एल्गोरिथ्म कचरा आउटपुट, लेकिन बदसूरत के साथ ठीक है:
flann::Matrix<double> input(new double[mat.rows()*mat.cols()], mat.rows(), mat.cols());
for (int i = 0; i < mat.rows(); i++) {
for (int j = 0; j < mat.cols(); j++) {
input[i][j] = mat(i, j);
}
}
मैं फ्लान से आधार Matrix_
प्रकार उपवर्ग को Eigen3 मैट्रिक्स करने के लिए एडॉप्टर बनाने का विकल्प की जांच की। समस्या यह है कि Matrix_
[]
ऑपरेटर के कार्यान्वयन के कार्यान्वयन पर निर्भर करता है। यह मुझे महसूस करता है कि ऊपर दिखाए गए सरल (लेकिन टूटे हुए) समाधान की तुलना में मुझे एक ही स्मृति समस्या का सामना करना पड़ सकता है।
आपको ऐसा व्यवहार क्या समझा सकता है?
- पंक्ति/स्तंभ-प्रमुख मुद्दा
- इनर, बाहरी कदम मुद्दा
- मेमोरी संरेखण असंगतियां
Eigen::Map
मीठा होता है, लेकिन मैं के लिए क्या नहीं देख रहा हूँ। यह मेरी कोड को फिर से लिखना पुस्तकालय libflann आधार से दुर्भाग्य से बहुत दूरstl::vector<std::vector<double> >
आधार प्रकार के रूप में औरEigen::Map
उन्हें इस्तेमाल करनेEigen::MatrixXd
- http://nanoflann-reference.mrpt.org/svn/structnanoflann_1_1KDTreeEigenMatrixAdaptor.html लिए प्रयोग करने योग्य होने के लिए करने के लिए चूसना होगा।
मुझे नैनोफ़्लान के साथ एक ही समस्या थी (हालांकि यह दोनों तरीकों से काम करता था लेकिन डिफ़ॉल्ट कॉलम-मेजर मेरे आवेदन के लिए बहुत बेकार था), धन्यवाद! –