00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
#include "StatsIterator.h"
00043
#include "TMat_maths.h"
00044
00045
namespace PLearn {
00046
using namespace std;
00047
00048
00049
00050
00051
00052
PLEARN_IMPLEMENT_ABSTRACT_OBJECT(StatsIterator,
"ONE LINE DESCR",
"NO HELP");
00053 void StatsIterator::makeDeepCopyFromShallowCopy(map<const void*, void*>& copies)
00054 {
00055 inherited::makeDeepCopyFromShallowCopy(copies);
00056
deepCopyField(
result, copies);
00057 }
00058
00059 bool StatsIterator::requiresMultiplePasses() {
return false; }
00060
00061 Vec StatsIterator::getResult() {
return result; }
00062
00063 void StatsIterator::declareOptions(
OptionList& ol)
00064 {
00065
declareOption(ol,
"result", &StatsIterator::result, OptionBase::learntoption,
00066
" result\n");
00067
00068 inherited::declareOptions(ol);
00069 }
00070
00071 void StatsIterator::oldwrite(ostream& out)
const
00072
{
00073
writeHeader(out,
"StatsIterator");
00074
00075
writeField(out,
"result",
result);
00076
writeFooter(out,
"StatsIterator");
00077 }
00078
00079 void StatsIterator::oldread(istream& in)
00080 {
00081
readHeader(in,
"StatsIterator");
00082
00083
readField(in,
"result",
result);
00084
readFooter(in,
"StatsIterator");
00085 }
00086
00087
00088
00089
00090
00091
PLEARN_IMPLEMENT_OBJECT(
MeanStatsIterator,
"ONE LINE DESCR",
"NO HELP");
00092
00093 void MeanStatsIterator::init(
int inputsize)
00094 {
00095
00096
00097 result =
Vec(inputsize);
00098
nsamples.
resize(inputsize);
00099
nsamples.
clear();
00100 }
00101
00102 void MeanStatsIterator::update(
const Vec& input)
00103 {
00104
addIfNonMissing(input,
nsamples,result);
00105 }
00106
00107 bool MeanStatsIterator::finish()
00108 {
00109
for (
int i=0;i<result.
length();i++)
00110 result[i] /=
nsamples[i];
00111
return true;
00112 }
00113
00114 void MeanStatsIterator::declareOptions(
OptionList& ol)
00115 {
00116
declareOption(ol,
"nsamples", &MeanStatsIterator::nsamples, OptionBase::learntoption,
00117
" nsamples\n");
00118
00119 inherited::declareOptions(ol);
00120 }
00121
00122
00123 void MeanStatsIterator::oldwrite(ostream& out)
const
00124
{
00125
writeHeader(out,
"MeanStatsIterator");
00126 inherited::write(out);
00127
writeField(out,
"nsamples",
nsamples);
00128
writeFooter(out,
"MeanStatsIterator");
00129 }
00130
00131 void MeanStatsIterator::oldread(istream& in)
00132 {
00133
readHeader(in,
"MeanStatsIterator");
00134 inherited::oldread(in);
00135
readField(in,
"nsamples",
nsamples);
00136
readFooter(in,
"MeanStatsIterator");
00137 }
00138
00139
00140
00141
00142
00143
PLEARN_IMPLEMENT_OBJECT(
ExpMeanStatsIterator,
"ONE LINE DESCR",
"NO HELP");
00144
00145 void ExpMeanStatsIterator::init(
int inputsize)
00146 {
00147
00148
00149 result =
Vec(inputsize);
00150
nsamples.
resize(inputsize);
00151
nsamples.
clear();
00152 }
00153
00154 void ExpMeanStatsIterator::update(
const Vec& input)
00155 {
00156
addIfNonMissing(input,
nsamples,result);
00157 }
00158
00159 bool ExpMeanStatsIterator::finish()
00160 {
00161
for (
int i=0;i<result.
length();i++)
00162 result[i] =
exp(result[i]/
nsamples[i]);
00163
return true;
00164 }
00165
00166 void ExpMeanStatsIterator::declareOptions(
OptionList& ol)
00167 {
00168
declareOption(ol,
"nsamples", &ExpMeanStatsIterator::nsamples, OptionBase::learntoption,
00169
" nsamples\n");
00170
00171 inherited::declareOptions(ol);
00172 }
00173
00174 void ExpMeanStatsIterator::oldwrite(ostream& out)
const
00175
{
00176
writeHeader(out,
"ExpMeanStatsIterator");
00177 inherited::write(out);
00178
writeField(out,
"nsamples",
nsamples);
00179
writeFooter(out,
"ExpMeanStatsIterator");
00180 }
00181
00182 void ExpMeanStatsIterator::oldread(istream& in)
00183 {
00184
readHeader(in,
"ExpMeanStatsIterator");
00185 inherited::oldread(in);
00186
readField(in,
"nsamples",
nsamples);
00187
readFooter(in,
"ExpMeanStatsIterator");
00188 }
00189
00190
00191
00192
00193
00194
PLEARN_IMPLEMENT_OBJECT(
StddevStatsIterator,
"ONE LINE DESCR",
"NO HELP");
00195
00196 void StddevStatsIterator::makeDeepCopyFromShallowCopy(map<const void*, void*>& copies)
00197 {
00198 inherited::makeDeepCopyFromShallowCopy(copies);
00199
deepCopyField(
mean, copies);
00200
deepCopyField(
meansquared, copies);
00201 }
00202
00203 void StddevStatsIterator::init(
int inputsize)
00204 {
00205
00206
00207
meansquared =
Vec(inputsize);
00208
mean =
Vec(inputsize);
00209
nsamples.
resize(inputsize);
00210
nsamples.
clear();
00211 }
00212
00213 void StddevStatsIterator::update(
const Vec& input)
00214 {
00215
addXandX2IfNonMissing(input,
nsamples,
mean,
meansquared);
00216 }
00217
00218 bool StddevStatsIterator::finish()
00219 {
00220
Vec square_mean(
mean.
length());
00221
for (
int i=0;i<
mean.
length();i++)
00222 {
00223
00224
real n =
nsamples[i];
00225 square_mean[i] =
mean[i]*
mean[i]/(n*(n-1.0));
00226
meansquared[i] /= n-1.0;
00227 }
00228
00229
meansquared -= square_mean;
00230 result =
sqrt(
meansquared);
00231
return true;
00232 }
00233
00234 void StddevStatsIterator::declareOptions(
OptionList& ol)
00235 {
00236
declareOption(ol,
"mean", &StddevStatsIterator::mean, OptionBase::learntoption,
00237
" mean\n");
00238
00239
declareOption(ol,
"meansquared", &StddevStatsIterator::meansquared, OptionBase::learntoption,
00240
" meansquared\n");
00241
00242
declareOption(ol,
"nsamples", &StddevStatsIterator::nsamples, OptionBase::learntoption,
00243
" nsamples\n");
00244
00245 inherited::declareOptions(ol);
00246 }
00247
00248 void StddevStatsIterator::oldwrite(ostream& out)
const
00249
{
00250
writeHeader(out,
"StddevStatsIterator");
00251 inherited::write(out);
00252
writeField(out,
"mean",
mean);
00253
writeField(out,
"meansquared",
meansquared);
00254
writeField(out,
"nsamples",
nsamples);
00255
writeFooter(out,
"StddevStatsIterator");
00256 }
00257
00258 void StddevStatsIterator::oldread(istream& in)
00259 {
00260
readHeader(in,
"StddevStatsIterator");
00261 inherited::oldread(in);
00262
readField(in,
"mean",
mean);
00263
readField(in,
"meansquared",
meansquared);
00264
readField(in,
"nsamples",
nsamples);
00265
readFooter(in,
"StddevStatsIterator");
00266 }
00267
00268
00269
00270
00271
00272
PLEARN_IMPLEMENT_OBJECT(
StderrStatsIterator,
"ONE LINE DESCR",
"NO HELP");
00273
00274 void StderrStatsIterator::makeDeepCopyFromShallowCopy(map<const void*, void*>& copies)
00275 {
00276 inherited::makeDeepCopyFromShallowCopy(copies);
00277
deepCopyField(
mean, copies);
00278
deepCopyField(
meansquared, copies);
00279 }
00280
00281 void StderrStatsIterator::init(
int inputsize)
00282 {
00283
00284
00285
meansquared =
Vec(inputsize);
00286
mean =
Vec(inputsize);
00287
nsamples.
resize(inputsize);
00288
nsamples.
clear();
00289 }
00290
00291 void StderrStatsIterator::update(
const Vec& input)
00292 {
00293
addXandX2IfNonMissing(input,
nsamples,
mean,
meansquared);
00294 }
00295
00296 bool StderrStatsIterator::finish()
00297 {
00298
for (
int i=0;i<
mean.
length();i++)
00299 {
00300
mean[i] /=
nsamples[i];
00301
meansquared[i] /=
nsamples[i]-1;
00302 }
00303
squareSubtract(
meansquared,
mean);
00304
for (
int i = 0; i <
mean.
length(); i++) {
00305 result[i] =
sqrt(
meansquared[i] /
real(
nsamples[i]));
00306 }
00307
return true;
00308 }
00309
00310 void StderrStatsIterator::declareOptions(
OptionList& ol)
00311 {
00312
declareOption(ol,
"mean", &StderrStatsIterator::mean, OptionBase::learntoption,
00313
" mean\n");
00314
00315
declareOption(ol,
"meansquared", &StderrStatsIterator::meansquared, OptionBase::learntoption,
00316
" meansquared\n");
00317
00318
declareOption(ol,
"nsamples", &StderrStatsIterator::nsamples, OptionBase::learntoption,
00319
" nsamples\n");
00320
00321 inherited::declareOptions(ol);
00322 }
00323
00324 void StderrStatsIterator::oldwrite(ostream& out)
const
00325
{
00326
writeHeader(out,
"StderrStatsIterator");
00327 inherited::write(out);
00328
writeField(out,
"mean",
mean);
00329
writeField(out,
"meansquared",
meansquared);
00330
writeField(out,
"nsamples",
nsamples);
00331
writeFooter(out,
"StderrStatsIterator");
00332 }
00333
00334 void StderrStatsIterator::oldread(istream& in)
00335 {
00336
readHeader(in,
"StderrStatsIterator");
00337 inherited::oldread(in);
00338
readField(in,
"mean",
mean);
00339
readField(in,
"meansquared",
meansquared);
00340
readField(in,
"nsamples",
nsamples);
00341
readFooter(in,
"StderrStatsIterator");
00342 }
00343
00344
00345
00346
00347
00348
PLEARN_IMPLEMENT_OBJECT(
SharpeRatioStatsIterator,
"ONE LINE DESCR",
"NO HELP");
00349
00350 void SharpeRatioStatsIterator::makeDeepCopyFromShallowCopy(map<const void*, void*>& copies)
00351 {
00352 inherited::makeDeepCopyFromShallowCopy(copies);
00353
deepCopyField(
mean, copies);
00354
deepCopyField(
meansquared, copies);
00355 }
00356
00357 void SharpeRatioStatsIterator::init(
int inputsize)
00358 {
00359
00360
00361
meansquared =
Vec(inputsize);
00362
mean =
Vec(inputsize);
00363
nnonzero =
Vec(inputsize);
00364 }
00365
00366 void SharpeRatioStatsIterator::update(
const Vec& input)
00367 {
00368
int n=input.
length();
00369
for (
int i=0;i<n;i++)
00370 {
00371
real in=input[i];
00372
if (in!=0)
nnonzero[i]++;
00373
mean[i] += in;
00374
meansquared[i] += in*in;
00375 }
00376 }
00377
00378 bool SharpeRatioStatsIterator::finish()
00379 {
00380
mean /=
nnonzero;
00381
meansquared /=
nnonzero;
00382
squareSubtract(
meansquared,
mean);
00383 result =
mean/
sqrt(
meansquared);
00384
return true;
00385 }
00386
00387 void SharpeRatioStatsIterator::declareOptions(
OptionList& ol)
00388 {
00389
declareOption(ol,
"mean", &SharpeRatioStatsIterator::mean, OptionBase::learntoption,
00390
" mean\n");
00391
00392
declareOption(ol,
"meansquared", &SharpeRatioStatsIterator::meansquared, OptionBase::learntoption,
00393
" meansquared\n");
00394
00395
declareOption(ol,
"nnonzero", &SharpeRatioStatsIterator::nnonzero, OptionBase::learntoption,
00396
" nnonzero\n");
00397
00398 inherited::declareOptions(ol);
00399 }
00400
00401 void SharpeRatioStatsIterator::oldwrite(ostream& out)
const
00402
{
00403
writeHeader(out,
"SharpeRatioStatsIterator");
00404 inherited::write(out);
00405
writeField(out,
"mean",
mean);
00406
writeField(out,
"meansquared",
meansquared);
00407
writeField(out,
"nnonzero",
nnonzero);
00408
writeFooter(out,
"SharpeRatioStatsIterator");
00409 }
00410
00411 void SharpeRatioStatsIterator::oldread(istream& in)
00412 {
00413
readHeader(in,
"SharpeRatioStatsIterator");
00414 inherited::oldread(in);
00415
readField(in,
"mean",
mean);
00416
readField(in,
"meansquared",
meansquared);
00417
readField(in,
"nnonzero",
nnonzero);
00418
readFooter(in,
"SharpeRatioStatsIterator");
00419 }
00420
00421
00422
00423
00424
00425
PLEARN_IMPLEMENT_OBJECT(
MinStatsIterator,
"ONE LINE DESCR",
"NO HELP");
00426
00427 void MinStatsIterator::init(
int inputsize)
00428 {
00429 result =
Vec(inputsize,FLT_MAX);
00430 }
00431
00432 void MinStatsIterator::update(
const Vec& input)
00433 {
00434
real* inputdata = input.
data();
00435
real* resultdata = result.
data();
00436
for(
int i=0; i<input.
length(); i++)
00437
if(inputdata[i]<resultdata[i])
00438 resultdata[i] = inputdata[i];
00439 }
00440
00441 bool MinStatsIterator::finish()
00442 {
return true; }
00443
00444 void MinStatsIterator::declareOptions(
OptionList& ol)
00445 {
00446 inherited::declareOptions(ol);
00447 }
00448
00449 void MinStatsIterator::oldwrite(ostream& out)
const
00450
{
00451
writeHeader(out,
"MinStatsIterator");
00452 inherited::write(out);
00453
writeFooter(out,
"MinStatsIterator");
00454 }
00455
00456 void MinStatsIterator::oldread(istream& in)
00457 {
00458
readHeader(in,
"MinStatsIterator");
00459 inherited::oldread(in);
00460
readFooter(in,
"MinStatsIterator");
00461 }
00462
00463
00464
00465
00466
00467
PLEARN_IMPLEMENT_OBJECT(
MaxStatsIterator,
"ONE LINE DESCR",
"NO HELP");
00468
00469 void MaxStatsIterator::init(
int inputsize)
00470 {
00471
00472
00473 result =
Vec(inputsize,-FLT_MAX);
00474 }
00475
00476 void MaxStatsIterator::update(
const Vec& input)
00477 {
00478
real* inputdata = input.
data();
00479
real* resultdata = result.
data();
00480
for(
int i=0; i<input.
length(); i++)
00481
if(inputdata[i]>resultdata[i])
00482 resultdata[i] = inputdata[i];
00483 }
00484
00485 bool MaxStatsIterator::finish()
00486 {
return true; }
00487
00488 void MaxStatsIterator::declareOptions(
OptionList& ol)
00489 {
00490 inherited::declareOptions(ol);
00491 }
00492
00493 void MaxStatsIterator::oldwrite(ostream& out)
const
00494
{
00495
writeHeader(out,
"MaxStatsIterator");
00496 inherited::write(out);
00497
writeFooter(out,
"MaxStatsIterator");
00498 }
00499
00500 void MaxStatsIterator::oldread(istream& in)
00501 {
00502
readHeader(in,
"MaxStatsIterator");
00503 inherited::oldread(in);
00504
readFooter(in,
"MaxStatsIterator");
00505 }
00506
00507
00508
00509
00510
00511
00512
PLEARN_IMPLEMENT_OBJECT(
LiftStatsIterator,
"ONE LINE DESCR",
"NO HELP");
00513 void LiftStatsIterator::makeDeepCopyFromShallowCopy(map<const void*, void*>& copies)
00514 {
00515 StatsIterator::makeDeepCopyFromShallowCopy(copies);
00516
deepCopyField(
output_and_pos, copies);
00517
deepCopyField(
targets, copies);
00518 }
00519
00520 LiftStatsIterator::LiftStatsIterator(
int the_index,
real the_fraction)
00521 : lift_index(the_index), lift_fraction(the_fraction)
00522 {}
00523
00524 void LiftStatsIterator::init(
int inputsize)
00525 {
00526
00527
00528 result =
Vec(2);
00529
00530
const int initial_length = 1000;
00531
output_and_pos.
resize(initial_length, 2);
00532
targets.
resize(initial_length);
00533
nsamples = 0;
00534 }
00535
00536 void LiftStatsIterator::update(
const Vec& input)
00537 {
00538
if (
nsamples ==
output_and_pos.
length())
00539 {
00540
output_and_pos.
resize(10*
output_and_pos.
length(), 2);
00541
targets.
resize(10*
output_and_pos.
length());
00542 }
00543
00544
output_and_pos(
nsamples, 0) =
FABS(input[
lift_index]);
00545
output_and_pos(
nsamples, 1) =
nsamples;
00546
targets[
nsamples] = (input[lift_index]>0) ? 1 : 0;
00547
nsamples++;
00548 }
00549
00550 bool LiftStatsIterator::finish()
00551 {
00552
output_and_pos.
resize(
nsamples,2);
00553
targets.
resize(
nsamples);
00554
00555
const int n_first_samples =
int(
lift_fraction*
nsamples);
00556
const int n_last_samples = nsamples - n_first_samples;
00557
selectAndOrder(
output_and_pos, n_last_samples);
00558
00559
00560
00561
00562
TVec<int> first_samples_index(n_first_samples);
00563 first_samples_index <<
output_and_pos.
subMat(n_last_samples,1,n_first_samples,1);
00564
00565
Vec first_samples_targets =
targets(first_samples_index);
00566
real first_samples_perf =
sum(first_samples_targets)/n_first_samples;
00567
real targets_perf =
sum(targets)/nsamples;
00568
real lift = first_samples_perf/targets_perf*100.0;
00569 result[0] = lift;
00570
real nones =
sum(targets);
00571
real max_first_samples_perf =
MIN(nones,(
real)n_first_samples)/n_first_samples;
00572
real max_lift = max_first_samples_perf/targets_perf*100.0;
00573 result[1] = lift/max_lift;
00574
00575
return true;
00576 }
00577
00578 void LiftStatsIterator::declareOptions(
OptionList& ol)
00579 {
00580
declareOption(ol,
"nsamples", &LiftStatsIterator::nsamples, OptionBase::learntoption,
00581
" nsamples\n");
00582
00583
declareOption(ol,
"lift_index", &LiftStatsIterator::lift_index, OptionBase::buildoption,
00584
" lift_index\n");
00585
00586
declareOption(ol,
"lift_fraction", &LiftStatsIterator::lift_fraction, OptionBase::buildoption,
00587
" lift_fraction\n");
00588
00589
declareOption(ol,
"output_and_pos", &LiftStatsIterator::output_and_pos, OptionBase::learntoption,
00590
" output_and_pos\n");
00591
00592
declareOption(ol,
"targets", &LiftStatsIterator::targets, OptionBase::learntoption,
00593
" targets\n");
00594
00595 inherited::declareOptions(ol);
00596 }
00597
00598 void LiftStatsIterator::oldwrite(ostream& out)
const
00599
{
00600
writeHeader(out,
"LiftStatsIterator");
00601 inherited::write(out);
00602
writeField(out,
"nsamples",
nsamples);
00603
writeField(out,
"lift_index",
lift_index);
00604
writeField(out,
"lift_fraction",
lift_fraction);
00605
writeField(out,
"output_and_pos",
output_and_pos);
00606
writeField(out,
"targets",
targets);
00607
writeFooter(out,
"LiftStatsIterator");
00608 }
00609
00610 void LiftStatsIterator::oldread(istream& in)
00611 {
00612
readHeader(in,
"LiftStatsIterator");
00613 inherited::oldread(in);
00614
readField(in,
"nsamples",
nsamples);
00615
readField(in,
"lift_index",
lift_index);
00616
readField(in,
"lift_fraction",
lift_fraction);
00617
readField(in,
"output_and_pos",
output_and_pos);
00618
readField(in,
"targets",
targets);
00619
readFooter(in,
"LiftStatsIterator");
00620 }
00621
00622
00623
00624
00625
00626
PLEARN_IMPLEMENT_OBJECT(
QuantilesStatsIterator,
"ONE LINE DESCR",
"NO HELP");
00627
00628 void QuantilesStatsIterator::makeDeepCopyFromShallowCopy(map<const void*, void*>& copies)
00629 {
00630 StatsIterator::makeDeepCopyFromShallowCopy(copies);
00631
deepCopyField(
quantiles, copies);
00632
deepCopyField(
data, copies);
00633 }
00634
00635 QuantilesStatsIterator::QuantilesStatsIterator(
Vec quantiles_,
int n_data)
00636 : nsamples(n_data), quantiles(quantiles_)
00637 {
00638 }
00639
00640 void QuantilesStatsIterator::init(
int inputsize)
00641 {
00642
data.
resize(inputsize);
00643
for (
int i=0;i<inputsize;i++)
00644 {
00645
data[i].
resize(
nsamples);
00646
data[i].
resize(0);
00647 }
00648
nsamples=0;
00649
00650
00651 result =
Vec(
quantiles.
length()*
data.
length());
00652 }
00653
00654 void QuantilesStatsIterator::update(
const Vec& input)
00655 {
00656
if (
nsamples ==
data[0].
length())
00657 {
00658
for (
int i=0;i<data.length();i++)
00659 {
00660 data[i].resize(10*(
nsamples+1));
00661 data[i].resize(
nsamples);
00662 }
00663 }
00664
00665
for (
int i=0;i<input.
length();i++)
00666 data[i].push_back(input[i]);
00667
nsamples++;
00668 }
00669
00670 bool QuantilesStatsIterator::finish()
00671 {
00672
for (
int i=0;i<
data.
length();i++)
00673
sortElements(
data[i]);
00674
real dq =
real(1.0)/
nsamples;
00675 real hdq = dq*real(0.5);
00676
Mat results = result.
toMat(
data.
length(),
quantiles.
length());
00677 results.
fill(
MISSING_VALUE);
00678
for (
int i=0;i<
data.
length();i++)
00679 {
00680 real q=0;
00681
for (
int t=0;t<
nsamples;t++,q+=dq)
00682 {
00683
for (
int j=0;j<
quantiles.
length();j++)
00684
if (
quantiles[j]>q-hdq &&
quantiles[j]<=q+hdq)
00685 results(i,j) =
data[i][t];
00686 }
00687 }
00688
return true;
00689 }
00690
00691 void QuantilesStatsIterator::declareOptions(
OptionList& ol)
00692 {
00693
declareOption(ol,
"nsamples", &QuantilesStatsIterator::nsamples, OptionBase::buildoption,
00694
" nsamples\n");
00695
00696
declareOption(ol,
"quantiles", &QuantilesStatsIterator::quantiles, OptionBase::buildoption,
00697
" quantiles\n");
00698
00699 inherited::declareOptions(ol);
00700 }
00701
00702 void QuantilesStatsIterator::oldwrite(ostream& out)
const
00703
{
00704
writeHeader(out,
"QuantilesStatsIterator");
00705 inherited::write(out);
00706
writeField(out,
"nsamples",
nsamples);
00707
writeField(out,
"quantiles",
quantiles);
00708
writeFooter(out,
"QuantilesStatsIterator");
00709 }
00710
00711 void QuantilesStatsIterator::oldread(istream& in)
00712 {
00713
readHeader(in,
"QuantilesStatsIterator");
00714 inherited::oldread(in);
00715
readField(in,
"nsamples",
nsamples);
00716
readField(in,
"quantiles",
quantiles);
00717
readFooter(in,
"QuantilesStatsIterator");
00718 }
00719
00720
00721
00722
00723
00724 StatsItArray::StatsItArray()
00725 :
Array<
StatsIt>(0,5)
00726 {}
00727
00728 StatsItArray::StatsItArray(
const StatsIt& statsit)
00729 :
Array<
StatsIt>(1,5)
00730 { (*this)[0] = statsit; }
00731
00732 StatsItArray::StatsItArray(
const StatsIt& statsit1,
const StatsIt& statsit2)
00733 :
Array<
StatsIt>(2,5)
00734 {
00735 (*this)[0] = statsit1;
00736 (*this)[1] = statsit2;
00737 }
00738
00739 void StatsItArray::init(
int inputsize)
00740 {
00741
for(
int k=0;
k<
size();
k++)
00742 (*this)[
k]->init(inputsize);
00743 }
00744
00745 void StatsItArray::update(
const Vec& input)
00746 {
00747
for(
int k=0;
k<
size();
k++)
00748 (*this)[
k]->update(input);
00749 }
00750 void StatsItArray::update(
const Mat& inputs)
00751 {
00752
for (
int i=0;i<inputs.
length();i++)
00753 {
00754
Vec input = inputs(i);
00755
update(input);
00756 }
00757 }
00758
00759 bool StatsItArray::requiresMultiplePasses()
00760 {
00761
for(
int k=0;
k<
size();
k++)
00762
if ( (*this)[
k]->requiresMultiplePasses() )
00763
return true;
00764
return false;
00765 }
00766
00767
00768 StatsItArray StatsItArray::finish()
00769 {
00770
StatsItArray unfinished;
00771
for(
int k=0;
k<
size();
k++)
00772
if ( ! (*this)[
k]->finish() )
00773 unfinished.
append((*
this)[
k]);
00774
return unfinished;
00775 }
00776
00777 Array<Vec> StatsItArray::getResults()
00778 {
00779
Array<Vec> results(
size());
00780
for(
int k=0;
k<
size();
k++)
00781 results[
k] = (*this)[
k]->getResult();
00782
return results;
00783 }
00784
00785 Array<Vec> StatsItArray::computeStats(
VMat data)
00786 {
00787
int inputsize = data.
width();
00788
init(inputsize);
00789
00790
Vec input(inputsize);
00791
StatsItArray unfinished = *
this;
00792
00793
while(unfinished.
size()>0)
00794 {
00795
for(
int i=0; i<data.
length(); i++)
00796 {
00797 data->getRow(i,input);
00798 unfinished.
update(input);
00799 }
00800 unfinished =
finish();
00801 }
00802
00803
return getResults();
00804 }
00805
00806 }