Changeset 145 for bdm/stat/libBM.cpp
- Timestamp:
- 08/20/08 15:41:21 (16 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
bdm/stat/libBM.cpp
r102 r145 25 25 times = in_times; 26 26 tsize = 0; 27 for ( i =0;i<len;i++ ) {tsize+=sizes ( i );}27 for ( i = 0;i < len;i++ ) {tsize += sizes ( i );} 28 28 }; 29 29 … … 32 32 } 33 33 34 RV::RV () : tsize ( 0 ),len ( 0 ) {};34 RV::RV() : tsize ( 0 ), len ( 0 ) {}; 35 35 36 voidRV::add ( const RV &rv2 ) {36 bool RV::add ( const RV &rv2 ) { 37 37 // 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 44 57 // return *this; 45 58 }; … … 58 71 } 59 72 60 RV RV::subselect ( ivec ind ) {73 RV RV::subselect ( ivec ind ) const { 61 74 return RV ( ids ( ind ), names ( to_Arr ( ind ) ), sizes ( ind ), times ( ind ) ); 62 75 } 63 76 64 void RV::t ( int delta ) { times += delta;}77 void RV::t ( int delta ) { times += delta;} 65 78 66 RV RV::operator() ( ivec ind ) {79 RV RV::operator() ( ivec ind ) const { 67 80 return RV ( ids ( ind ), names ( to_Arr ( ind ) ), sizes ( ind ), times ( ind ) ); 68 81 } 69 82 70 bool RV::equal ( RVrv2 ) const {71 return ( ids ==rv2.ids ) && ( times == rv2.times ) && ( sizes==rv2.sizes );83 bool RV::equal ( const RV &rv2 ) const { 84 return ( ids == rv2.ids ) && ( times == rv2.times ) && ( sizes == rv2.sizes ); 72 85 } 73 86 74 87 mat 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() ); 77 90 return X; 78 91 }; … … 88 101 } 89 102 90 ivec RV::indexlist() { 91 ivec indlist ( tsize ); 103 str RV::tostr() const { 104 ivec idlist ( tsize ); 105 ivec tmlist ( tsize ); 92 106 int i; 93 107 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 ); 96 112 } 97 return indlist; 113 return str ( idlist, tmlist ); 114 } 115 116 ivec 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 128 RV 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 134 ivec 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; 98 146 } 99 147