Changeset 145 for bdm/stat/libBM.cpp

Show
Ignore:
Timestamp:
08/20/08 15:41:21 (16 years ago)
Author:
smidl
Message:

Oprava dokumentace

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • bdm/stat/libBM.cpp

    r102 r145  
    2525        times = in_times; 
    2626        tsize = 0; 
    27         for ( i=0;i<len;i++ ) {tsize+=sizes ( i );} 
     27        for ( i = 0;i < len;i++ ) {tsize += sizes ( i );} 
    2828}; 
    2929 
     
    3232} 
    3333 
    34 RV::RV () : tsize ( 0 ),len ( 0 ) {}; 
     34RV::RV() : tsize ( 0 ), len ( 0 ) {}; 
    3535 
    36 void RV::add ( const RV &rv2 ) { 
     36bool RV::add ( const RV &rv2 ) { 
    3737        // TODO 
    38         tsize+=rv2.tsize; 
    39         len +=rv2.len; 
    40         ids=concat ( ids,rv2.ids ); 
    41         sizes=concat ( sizes,rv2.sizes ); 
    42         times=concat ( times,rv2.times ); 
    43         names=concat ( names,rv2.names ); 
     38        ivec ind = rv2.findself ( *this ); //should be -1 all the time 
     39        ivec index = itpp::find(ind==-1);  
     40         
     41        if ( index.length() < rv2.len ) { //conflict 
     42                ids = concat ( ids, rv2.ids(index) ); 
     43                sizes = concat ( sizes, rv2.sizes(index) ); 
     44                times = concat ( times, rv2.times(index) ); 
     45                names = concat ( names, rv2.names(to_Arr(index)) ); 
     46        } 
     47        else { 
     48                ids = concat ( ids, rv2.ids ); 
     49                sizes = concat ( sizes, rv2.sizes ); 
     50                times = concat ( times, rv2.times ); 
     51                names = concat ( names, rv2.names ); 
     52        } 
     53        tsize = sum(sizes); 
     54        len = ids.length(); 
     55        return (index.length()<rv2.len); 
     56 
    4457//      return *this; 
    4558}; 
     
    5871} 
    5972 
    60 RV RV::subselect ( ivec ind ) { 
     73RV RV::subselect ( ivec ind ) const { 
    6174        return RV ( ids ( ind ), names ( to_Arr ( ind ) ), sizes ( ind ), times ( ind ) ); 
    6275} 
    6376 
    64 void RV::t ( int delta ) { times +=delta;} 
     77void RV::t ( int delta ) { times += delta;} 
    6578 
    66 RV RV::operator() ( ivec ind ) { 
     79RV RV::operator() ( ivec ind ) const { 
    6780        return RV ( ids ( ind ), names ( to_Arr ( ind ) ), sizes ( ind ), times ( ind ) ); 
    6881} 
    6982 
    70 bool RV::equal ( RV rv2 ) const { 
    71         return ( ids==rv2.ids ) && ( times == rv2.times ) && ( sizes==rv2.sizes ); 
     83bool RV::equal ( const RV &rv2 ) const { 
     84        return ( ids == rv2.ids ) && ( times == rv2.times ) && ( sizes == rv2.sizes ); 
    7285} 
    7386 
    7487mat epdf::sampleN ( int N ) const { 
    75         mat X =zeros ( rv.count(),N ); 
    76         for ( int i=0;i<N;i++ ) X.set_col ( i,this->sample() );  
     88        mat X = zeros ( rv.count(), N ); 
     89        for ( int i = 0;i < N;i++ ) X.set_col ( i, this->sample() ); 
    7790        return X; 
    7891}; 
     
    88101} 
    89102 
    90 ivec RV::indexlist() { 
    91         ivec indlist ( tsize ); 
     103str RV::tostr() const { 
     104        ivec idlist ( tsize ); 
     105        ivec tmlist ( tsize ); 
    92106        int i; 
    93107        int pos = 0; 
    94         for ( i=0;i<len;i++ ) { 
    95                 indlist.set_subvector ( pos,pos+sizes ( i )-1, ids ( i ) ); 
     108        for ( i = 0;i < len;i++ ) { 
     109                idlist.set_subvector ( pos, pos + sizes ( i ) - 1, ids ( i ) ); 
     110                tmlist.set_subvector ( pos, pos + sizes ( i ) - 1, times ( i ) ); 
     111                pos += sizes ( i ); 
    96112        } 
    97         return indlist; 
     113        return str ( idlist, tmlist ); 
     114} 
     115 
     116ivec RV::dataind ( RV rv2 ) const { 
     117        str str2 = rv2.tostr(); 
     118        ivec res ( 0 ); 
     119        ivec part; 
     120        int i; 
     121        for ( i = 0;i < len;i++ ) { 
     122                part = itpp::find ( ( str2.ids == ids ( i ) ) & ( str2.times == times ( i ) ) ); 
     123                res = concat ( res, part ); 
     124        } 
     125        return res; 
     126} 
     127 
     128RV RV::subt ( const RV rv2 ) const { 
     129        ivec res = this->findself ( rv2 ); // nonzeros 
     130        ivec valid = itpp::find ( res == -1 ); //-1 => value not found => it remains 
     131        return ( *this ) ( valid ); //keep those that were not found in rv2 
     132} 
     133 
     134ivec RV::findself ( const RV &rv2 ) const { 
     135        int i, j; 
     136        ivec tmp = -ones_i ( len ); 
     137        for ( i = 0;i < len;i++ ) { 
     138                for ( j = 0;j < rv2.length();j++ ) { 
     139                        if ( ( ids ( i ) == rv2.ids ( j ) ) & ( times ( i ) == rv2.times ( j ) ) ) { 
     140                                tmp ( i ) = j; 
     141                                break; 
     142                        } 
     143                } 
     144        } 
     145        return tmp; 
    98146} 
    99147