2013-04-10 8 views
6

मैं कुछ MATLABEigen 3 टेम्पलेट लायब्रेरी का उपयोग कर सी ++ करने के लिए कोड पोर्टिंग रहा हूँ, और मैं इस आम MATLAB के लिए एक अच्छा मानचित्रण रहा हूँ मुहावरा:मैं "<array-of-true-or-false> = <array><= <scalar>" Eigen 3 का उपयोग करके कैसे व्यक्त करूं?

K>> [1 2 3 4 5] <= 3 

ans = 

    1  1  1  0  0 

तो, एक तुलना सरणी और एक स्केलर, एक ही आकार के बुलियन की एक सरणी लौट रहा है।

मैं समझता हूं कि ईजिन का ऐरे वर्ग में गुणांक-तुलना तुलना ऑपरेटर हैं, लेकिन यदि मैं सही ढंग से दस्तावेज़ों की व्याख्या कर रहा हूं तो वे केवल एक और सरणी के साथ काम करते हैं; स्केलर मूल्यों के साथ नहीं।

क्या कोई विकल्प है जो मुझे याद आया है जो स्केलर के साथ तुलना करेगा? या उसमें असफल रहा, अभिव्यक्ति के आरएचएस के लिए स्केलर मान से भरे उचित आकार के ऐरे बनाने के लिए एक अच्छा बेवकूफ तरीका?

उत्तर

7
#eigen आईआरसी चैनल से ChriSopht_ करने के लिए धन्यवाद के साथ

:

VectorXd compareMat = ...; 
double cutoff = 3; 
Matrix<bool, Dynamic, 1> result = compareMat.array() <= cutoff; 

तो, चाल .array() उपयोग कर रहा है गुणांक के लिहाज से ऑपरेटरों पर प्राप्त करने के लिए, और निश्चित रूप से तो वापसी प्रकार सही हो रही है ...

+0

यदि आप रिटर्न प्रकार से निपटना नहीं चाहते हैं और आप सी ++ 11 का उपयोग कर रहे हैं, तो आप हमेशा 'ऑटो परिणाम = comparMat.array() <= cutoff;' का उपयोग कर सकते हैं। – GJStein

संबंधित मुद्दे