c++ - How to extract a subvector (of a Eigen::Vector) from a vector of indices in Eigen? -
मान लें कि मेरे पास
Eigen :: VectorXd x; // {1,2,3,4,5,6,7,8}
और
Eigen :: VectorXd ind_vec; // {0,2,4,5}
क्या एक्स के ind_vec तत्व निकालने का एक आसान तरीका है?
कुछ ऐसा: x.extract (ind_vec) लौट रहा है {1, 3, 5, 6}
धन्यवाद
ऐसा लगता है कि यह अपने आप लिखना आसान होगा यदि यह वैक्टर के लिए है: < पूर्व> #include "Eigen / Core" टेम्पलेट & lt; typename T, typename T2 & gt; टी निकालने (कॉन्स्ट टी 2 एंड फुल, कॉन्स्ट टी एंड इंड) {int num_indices = ind.innerSize (); टी लक्ष्य (num_indices); के लिए (इंट i = 0; i & lt; num_indices; i ++) {लक्ष्य [i] = पूर्ण [इंड [i]]; } वापसी लक्ष्य; } Int main () {Eigen :: VectorXd पूर्ण (8); पूर्ण & lt; & lt; 1, 2, 3, 4, 5, 6, 7, 8; ईजेन :: वेक्टर 4 डी इंड_वेक (4); Ind_vec & lt; & lt; 0, 2, 4, 5; Std :: cout & lt; & lt; "पूर्ण:" & lt; & lt; पूर्ण करें & lt; & lt; std :: endl; Std :: cout & lt; & lt; "इंड_वेसी:" & lt; & lt; ind_vec & lt; & lt; std :: endl; Std :: cout & lt; & lt; "निकाले" & lt; & lt; निकालें (पूर्ण, इंड_विसी) & lt; & lt; std :: endl; }
अधिकांश मामलों के लिए यह कार्य करना चाहिए
संपादित करें: उन मामलों के लिए जहां आपका सूचकांक स्केलर प्रकार आपके स्रोत और लक्ष्य स्केलर प्रकार से भिन्न है निम्नलिखित कार्य (सभी बिल्ड-इन ईगेन प्रकारों के लिए)।
टेम्पलेट & lt; typename टी, टाइपनाम टी 2 & gt; ईजीन :: मैट्रिक्स & lt; typename T2 :: Scalar, T :: RowsAtCompileTime, T :: ColsAtCompileTime, T :: विकल्प & gt; Extract2 (const eigen :: densebase & lt; t2 & gt; और पूर्ण, const eigen :: densebase & lt; t & gt; और amp; ind) {target_t = Eigen :: Matrix & lt; टी 2 :: स्केलर, टी :: राउज़ कम्पाइलटाइम, टी :: कोल्सएट कॉम्पले टाइम, टी :: ऑप्शंस & gt; ; Int num_indices = ind.innerSize (); Target_t लक्ष्य (num_indices); के लिए (इंट i = 0; i & lt; num_indices; i ++) {लक्ष्य [i] = पूर्ण [इंड [i]]; } वापसी लक्ष्य; } (यह अन्य एक से अलग है, जिसमें आप इंडेक्स के एक सदिश का उपयोग कर सकते हैं और स्रोत के रूप में डबल्स की एक सदिश और एक वेक्टर के बजाय एक वेक्टर के बदले डबल्स प्राप्त करते हैं Ints के रूप में extract () ऊपर होता है)
Comments
Post a Comment