2016-07-21 22 views
0

Say IEigen Matrix-Bibliothek Index-Operation

Eigen::VectorXd r = Eigen::VectorXd::Random(10); 

jetzt möchte ich folgende Voraussetzungen erfüllt sein:

double lb1(-0.1); 
    double ub1(0.1); 
    double v(5.); 
    for(int i =0;i<10;i++) 
     if((lb1 < r[i]) && (r[i]<ub1)) 
      r[i] = v; 

gibt es viele nicht überlappende (LB1, ub1) und viele "v". Gibt es eine einfache elegante Möglichkeit, diese Berechnung durchzuführen, ohne zwei Schleifen zu schreiben (ich habe eine Matlab-Art der Operation im Sinn)

Vielen Dank im Voraus für jede Hilfe.

Antwort

2

könnten Sie .select()

r = (r.array() > lb1 && r.array() < ub1).select(v, r); 
+0

perfekt nutzen das ist, was ich suchte. – user1612986

+0

gibt es eine .select() Verwendung, wo ich gerade das Subarray innerhalb von lb1 und ub1 extrahiere? – user1612986

+0

was meinst du? .. – kangshiyin