当前位置: 首页>>代码示例>>C++>>正文


C++ TimeSeries::selectTime方法代码示例

本文整理汇总了C++中TimeSeries::selectTime方法的典型用法代码示例。如果您正苦于以下问题:C++ TimeSeries::selectTime方法的具体用法?C++ TimeSeries::selectTime怎么用?C++ TimeSeries::selectTime使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在TimeSeries的用法示例。


在下文中一共展示了TimeSeries::selectTime方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: start

void HMMObserver::start() {
	vector<vector<TimeSeries *> *> chunk_bins;
	vector<double> current_means;
	vector<double> current_ns;
	vector<double> current_variance;
	vector<TimeSeries *> chunks;

	TimeSeries * inputTS = NULL;
	if (use_csv) {
		inputTS = CSVLoader::loadTSfromCSV(csvin_fname);
	} else {
		log_e("No input source defined. Stop.");
		return;
	}

#define NUM_STEPS 5
	TimeSeries * inputRaw = inputTS->copy();

	TRANS_DETECTOR.setParams(0.05,60);
	double NEW_BIN_THRESH = 1.2;

	log_prog(1,NUM_STEPS,"Detect Transitions","");
	EventSeries<TransitionEvent> * es = TRANS_DETECTOR.detect(inputTS);

	log_i("%d Transitions found\n",es->events.size());
	if ( es->events.size() <= 1 ) {
		log_i("Not enough transitions to do anything useful");
		log_prog(NUM_STEPS,NUM_STEPS,"Early abort","No data");
		error = 1;
		return;
	}

	// STEP Ia : SEPARATE INTO CHUNKS
	log_prog(2,NUM_STEPS,"Separate Time Chunks","");
	chunks.push_back(inputTS->selectTime(inputTS->t[0],es->events[0].t));
	for ( size_t c = 0; c < es->events.size() - 1; c++) {
		chunks.push_back(inputTS->selectTime(es->events[c].t,es->events[c+1].t));
	}
	chunks.push_back(inputTS->selectTime(es->events[es->events.size()-1].t,inputTS->t[inputTS->t.size()-1]));

	if (csvout_fname.size() > 0) {
		TimeSeries * tsout = new TimeSeries();
		tsout->metadata.push_back(" Data separated into chunks via the transition detector");
		for (size_t c = 0; c < chunks.size(); c++) {
			tsout->insertPointAtEnd(chunks[c]->t[0],chunks[c]->mean());
		}
		CSVLoader::writeTStoCSV(csvout_fname,tsout,outprec);
		delete tsout;
	}


	if (statesin_fname.size() > 0 ) {
		// STEP Ib : ORDER CHUNKS BY SIZE
		log_prog(3,NUM_STEPS,"Order by Size","");
		sort(chunks.begin(), chunks.end(), cmp_by_timeseries_length);

		// STEP Ic : CATAGORIZE CHUNKS BY MEANS

		// start with biggest chunk in first bin
		chunk_bins.push_back(new vector<TimeSeries *>);
		chunk_bins[0]->push_back(chunks[0]);
		current_means.push_back(chunks[0]->mean());

		for ( int c = 1; c < chunks.size(); c++ ) {
			log_prog(4,NUM_STEPS,"Categorize by Means","%.2f%%",(100.0*c/chunks.size()));
			double chmean = chunks[c]->mean();

			// find the "closest" bin
			int minmean = 0;
			for ( int d = 1; d < chunk_bins.size(); d++ ) {
				if ( fabs(chmean - current_means[d]) < fabs(chmean - current_means[minmean]) ) {
					minmean = d;
				}
			}
			// if closest bin is too far off, create a new bin
			if ( current_means[minmean] / chmean > NEW_BIN_THRESH || chmean / current_means[minmean] > NEW_BIN_THRESH ) {
				chunk_bins.push_back(new vector<TimeSeries *>);
				chunk_bins.back()->push_back(chunks[c]);
				current_means.push_back(chmean);
			} else { // add to bin and update mean
				current_means[minmean] = (current_means[minmean] * chunk_bins[minmean]->size() + chmean) / (chunk_bins[minmean]->size() + 1);
				chunk_bins[minmean]->push_back(chunks[c]);
			}
		}

		for ( int c = 0; c < chunk_bins.size(); c++ ) {
			int varn = 0;
			double varsum = 0;
			double meansum = 0;
			for (int d = 0; d < chunk_bins[c]->size(); d++ ) {
				varn += chunk_bins[c]->at(d)->t.size();
			}
			current_ns.push_back(varn);
			// recalculate means
			for ( int d = 0; d < chunk_bins[c]->size(); d++ ) {
				meansum += chunk_bins[c]->at(d)->sum();
			}
			meansum = current_means[c] = meansum/varn;

			for (int d = 0; d < chunk_bins[c]->size(); d++ ) {
//.........这里部分代码省略.........
开发者ID:kweekly,项目名称:sensezilla-cpp,代码行数:101,代码来源:transition_chunker.cpp


注:本文中的TimeSeries::selectTime方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。