예제 #1
0
/**
 *   TODO: unit test channel_pow_stats::update_pbs_avg
 */
bool channel_pow_stats::update_bps_avg( uint64_t bytes_recv, const pow_hash& msg_pow )
{
   // normalize the proof of work for the message size
   fc::bigint msg( &msg_pow,     sizeof(msg_pow) );
   msg *= ( (bytes_recv / 1024) + 1); // give the average work per kb

   // for the purposes of this calculation, there is no such thing as a message less than
   // 1 KB in size.
   if( bytes_recv < 1024 ) bytes_recv = 1024; 

   // first check the work, if it is valid we can work it into our
   // POW average, otherwise we will ignore it.
   if( msg_pow > target_pow ) return false;

   // how much time has elapsed since the last bytes that passed
   auto ellapsed_us = (fc::time_point::now() - last_recv).count();
   last_recv = fc::time_point::now();

   // prevent long delays between message from biasing the average too much
   // also protects against OS time changes 
   if( ellapsed_us > BITCHAT_BANDWIDTH_WINDOW_US )
   {
     ellapsed_us = BITCHAT_BANDWIDTH_WINDOW_US/32;
   }

   // calculate the weighted average for the bitrate
   auto total = avg_bits_per_usec*BITCHAT_BANDWIDTH_WINDOW_US + (8 * bytes_recv * ellapsed_us);
   avg_bits_per_usec = total / (BITCHAT_BANDWIDTH_WINDOW_US + ellapsed_us);

   // use the same weighting factors to weight the update to the average POW
   fc::bigint avg( &average_pow, sizeof(average_pow) );
   fc::bigint wsum = (avg * BITCHAT_BANDWIDTH_WINDOW_US + msg*ellapsed_us) 
                     / 
                     (BITCHAT_BANDWIDTH_WINDOW_US+ellapsed_us);

   fc::bigint tar( &target_pow, sizeof(target_pow) );
   if( avg_bits_per_usec >= target_bits_per_usec )
   {
      tar *= wsum * bigint( 990000ll);
      tar /= bigint(1000000ll);
   }
   else
   {
      // increase target (making it easier to get under)
      tar =  wsum * bigint(1010000ll); 
      tar /=        bigint(1000000ll);
   }

   std::vector<char> tarw(tar);
   std::vector<char> avgw(wsum);
   target_pow = pow_hash();

   memcpy( (char*)&target_pow + sizeof(pow_hash)-tarw.size(), 
            tarw.data(), tarw.size() );
   
   memcpy( (char*)&average_pow + sizeof(pow_hash)-avgw.size(), 
            avgw.data(), avgw.size() );

   return true;
}
예제 #2
0
int main() {

    int a[]={1,2,3,4,5,6,7,8,9,0};//[MAX_SIZE];
    int n=7, opcija;

    do {
        printf("    Opcije:\n\n");
        printf("\t1. Unos elemenata niza.\n");
        printf("\t2. Izracunavanje sume.\n");
        printf("\t3. Racunanje srednje vrednosti.\n");
        printf("\t4. Ispis niza.\n");
        printf("\t5. Izlaz iz programa.\n ");
        printf("\n\t>> ");
        scanf("%d", &opcija);

        switch( opcija ) {
            case 1: unosNiza(a, &n); break;
            case 2: printf("Suma je: %d.\n\n", suma(a, n)); break;
            case 3: printf("Srednja vrednost je: %lf.\n\n", avg(a, n)); break;
            case 4: ispis(a, n); break;
        }

    } while ( opcija != 5);

    return 0;
}
예제 #3
0
파일: pysample.c 프로젝트: weiang/recent
/* double avg(double*, int) */
static PyObject* py_avg(PyObject* self, PyObject* args)
{
    PyObject* bufobj;
    Py_buffer view;
    double result;

    if (!PyArg_ParseTuple(args, "O", &bufobj)) {
        return NULL;
    }

    if (PyObject_GetBuffer(bufobj, &view, PyBUF_ANY_CONTIGUOUS | PyBUF_FORMAT) == -1) {
        return NULL;
    }

    if (view.ndim != 1) {
        PyErr_SetString(PyExc_TypeError, "Expected a 1-dimensional array");
        PyBuffer_Release(&view);
        return NULL;
    }

    if (strcmp(view.format, "d") != 0) {
        PyErr_SetString(PyExc_TypeError, "Expected an array of doubles");
        PyBuffer_Release(&view);
        return NULL;
    }

    result = avg(view.buf, view.shape[0]);
    PyBuffer_Release(&view);
    return Py_BuildValue("d", result);
}
예제 #4
0
void Twirl::update(float time)
{
    int i, j;
    Vec2    c = _position;

    for (i = 0; i < (_gridSize.width+1); ++i)
    {
        for (j = 0; j < (_gridSize.height+1); ++j)
        {
            Vec3 v = getOriginalVertex(Vec2(i ,j));

            Vec2 avg(i-(_gridSize.width/2.0f), j-(_gridSize.height/2.0f));
            float r = avg.getLength();

            float amp = 0.1f * _amplitude * _amplitudeRate;
            float a = r * cosf( (float)M_PI/2.0f + time * (float)M_PI * _twirls * 2 ) * amp;

            Vec2 d(
                sinf(a) * (v.y-c.y) + cosf(a) * (v.x-c.x),
                cosf(a) * (v.y-c.y) - sinf(a) * (v.x-c.x));

            v.x = c.x + d.x;
            v.y = c.y + d.y;

            setVertex(Vec2(i ,j), v);
        }
    }
}
예제 #5
0
  Average(const TConstIter begin, const TConstIter end):
    count_(0u),
    avg_(0.0),
    stdDev_(0.0)
  {
    // vector of data will be needed any way later for precise computations
    std::vector<FP> tmp(begin, end);

    // count number of elements
    count_=tmp.size();

    // compute the average
    std::sort( tmp.begin(), tmp.end() );
    avg_=arraySumFastFP<FP>( tmp.begin(), tmp.end() )/count();

    // special case
    if(count_==1u)
    {
      stdDev_=0;
      return;
    }

    // compute standard deviation
    assert( count()>1u );
    for(typename std::vector<FP>::iterator it=tmp.begin(); it!=tmp.end(); ++it)
      *it=std::pow(*it-avg(), 2);
    std::sort( tmp.begin(), tmp.end() );
    stdDev_=std::sqrt( arraySumFastFP<FP>( tmp.begin(), tmp.end() ) / ( count()-1 ) );
  }
예제 #6
0
파일: z3.c 프로젝트: Ostoja/PJISP
int main(){
    int A[MAX],n,i,b;
    printf("Unesite broj clanova niza: ");
    scanf("%d",&n);
    printf("Unesite clanove niza: \n");
    for(i=0;i<n;i++)scanf("%d",&A[i]);
    do{
        printf("\n");
        printf("Opcije: \n\n");
        printf("\t 1. Izracunavanje sume.\n");
        printf("\t 2. Racunanje srednje vrednosti.\n");
        printf("\t 3. Nalazenje minimuma.\n");
        printf("\t 4. Nalazenje maksimuma.\n");
        printf("\t 5. Ispis elemenata.\n");
        printf("\n\t>>");
        scanf("%d", &b);
        switch(b) {
            case 1: printf("Suma svih elemenata u nizu je: %d\n", suma(A,n)); break;
            case 2: printf("Aritmeticka sredina niza je: %.2f\n", avg(A,n)); break;
            case 3: printf("Minimalna vrednost u nizu je: %d\n", min(A,n)); break;
            case 4: printf("Maximalna vrednost u nizu je: %d\n", max(A,n)); break;
            case 5: ispis(A,n); break;
    }
    }while(b!=5);
    return 0;
}
예제 #7
0
// Analysis_TimeCorr::CalculateAverages()
std::vector<double> Analysis_Timecorr::CalculateAverages(DataSet_Vector const& vIn, 
                                                         AvgResults& avgOut) 
{
  std::vector<double> R3i;
  R3i.reserve(vIn.Size());
  Vec3 avg(0.0, 0.0, 0.0);
  avgOut.rave_ = 0.0;
  avgOut.r3iave_ = 0.0;
  avgOut.r6iave_ = 0.0;
  // Loop over all vectors
  for (DataSet_Vector::const_iterator vec = vIn.begin();
                                      vec != vIn.end(); ++vec)
  {
    const Vec3& VXYZ = *vec;
    // Calc vector length
    double len = sqrt( VXYZ.Magnitude2() );
    // Update avgcrd, rave, r3iave, r6iave
    avg += VXYZ;
    avgOut.rave_ += len;
    double r3i = 1.0 / (len*len*len);
    avgOut.r3iave_ += r3i;
    avgOut.r6iave_ += r3i*r3i;
    R3i.push_back( r3i );
  }
  // Normalize averages
  double dnorm = 1.0 / (double)vIn.Size();
  avgOut.rave_ *= dnorm;
  avgOut.r3iave_ *= dnorm;
  avgOut.r6iave_ *= dnorm;
  avgOut.avgr_ = sqrt(avg.Magnitude2()) * dnorm;
  return R3i;
}
예제 #8
0
static void do_average_spillmap_blue_fac(bNode *node, float* out, float *in, float *fac)
{
    NodeColorspill *ncs;
    ncs=node->storage;

    out[0] = *fac * (in[0]-(ncs->limscale * avg(in[0], in[1]) ));
}
예제 #9
0
static int __init avg_init(void)
{
printk("I am in init module\n");
a=avg(par1,par2);
printk("avg of numbers is:%d\n",a);
return(0);
}
예제 #10
0
파일: dmxstat.c 프로젝트: mcr/xorg-xvnc4
/* Actually do the work of printing out the human-readable message. */
static CARD32 dmxStatCallback(OsTimerPtr timer, CARD32 t, pointer arg)
{
    int         i, j;
    static int  header = 0;
    int         limit = dmxNumScreens;

    if (!dmxNumScreens) {
        header = 0;
        return DMX_STAT_INTERVAL;
    }

    if (!header++ || !(header % 10)) {
        dmxLog(dmxDebug,
               " S SyncCount  Sync/s avSync mxSync avPend mxPend | "
               "<10ms   <1s   >1s\n");
    }

    if (dmxStatDisplays && dmxStatDisplays < limit) limit = dmxStatDisplays;
    for (i = 0; i < limit; i++) {
        DMXScreenInfo *dmxScreen = &dmxScreens[i];
        DMXStatInfo   *s         = dmxScreen->stat;
        unsigned long aSync, mSync;
        unsigned long aPend, mPend;
        
        if (!s) continue;

        aSync = avg(&s->usec,    &mSync);
        aPend = avg(&s->pending, &mPend);
        dmxLog(dmxDebug, "%2d %9lu %7lu %6lu %6lu %6lu %6lu |",
               i,                                               /* S */
               s->syncCount,                                    /* SyncCount */
               (s->syncCount
                - s->oldSyncCount) * 1000 / dmxStatInterval,    /* Sync/s */
               aSync,                                           /* us/Sync */
               mSync,                                           /* max/Sync */
               aPend,                                           /* avgPend */
               mPend);                                          /* maxPend */
        for (j = 0; j < DMX_STAT_BINS; j++)
            dmxLogCont(dmxDebug, " %5lu", s->bins[j]);
        dmxLogCont(dmxDebug, "\n");

                                /* Reset/clear */
        s->oldSyncCount = s->syncCount;
        for (j = 0; j < DMX_STAT_BINS; j++) s->bins[j] = 0;
    }
    return DMX_STAT_INTERVAL;   /* Place on queue again */
}
예제 #11
0
void naive_smooth(int dim, pixel *src, pixel *dst) 
{
    int i, j;

    for (i = 0; i < dim; i++)
	for (j = 0; j < dim; j++)
	    dst[RIDX(i, j, dim)] = avg(dim, i, j, src);
}
예제 #12
0
void show_scores(const int arr[], const int size)
{
	for(int i = 0; i < size; i++)
		std::cout << arr[i] << ", ";

	std::cout << "Average: " << avg(arr ,size) << std::endl;

}
예제 #13
0
double WaveformUtilities::Eccentricity_rDot(const std::vector<double>& t, const std::vector<double>& rDot,
                                            const double r0, const double Omega0, double& DeltarDot, double& DeltaPhiDot) {
  //// Do the fit to the model:
  ////   rDot(t) = vbar0 + arbar0*t + Br*cos(omegar*t+phir)

  //// First fit to rDotDot to find phase, frequency, and amplitude
  std::vector<double> rDotDot = dydx(rDot, t);
  std::vector<double> aDotDotGuesses(3);
  aDotDotGuesses[0] = 0.5*(max(rDotDot)-min(rDotDot));
  aDotDotGuesses[1] = Omega0;
  aDotDotGuesses[2] = 0.0;
  std::vector<double> rDotDotMinusAvg = rDotDot-avg(rDotDot);
  std::vector<double> TrivialSigmas(t.size(), 1.0);
  Eccentricity_rDotDotFit e_dd;
  FitNonlinear<Eccentricity_rDotDotFit> rDotDotFit(t, rDotDotMinusAvg, TrivialSigmas, aDotDotGuesses, e_dd, 1.e-8);
  rDotDotFit.hold(0, aDotDotGuesses[0]);
  rDotDotFit.hold(1, aDotDotGuesses[1]);
  rDotDotFit.fit();
  rDotDotFit.free(1);
  rDotDotFit.fit();
  rDotDotFit.free(0);
  rDotDotFit.fit();

  //// Next fit to rDot to find all parameters
  std::vector<double> aDotGuesses(5);
  aDotGuesses[0] = avg(rDot);
  aDotGuesses[1] = avg(rDotDot);
  aDotGuesses[2] = rDotDotFit.a[0] / rDotDotFit.a[1];
  aDotGuesses[3] = rDotDotFit.a[1];
  aDotGuesses[4] = rDotDotFit.a[2];
  Eccentricity_rDotFit e_d;
  FitNonlinear<Eccentricity_rDotFit> rDotFit(t, rDot, TrivialSigmas, aDotGuesses, e_d, 1.e-8);
  rDotFit.fit();

  //// Adjust the parameters
  //double& vbar0 = rDotFit.a[0];
  //double& arbar0 = rDotFit.a[1];
  double& Br = rDotFit.a[2];
  double& omegar = rDotFit.a[3];
  double& phir = rDotFit.a[4];
  DeltarDot = -Br * cos(phir); // Eq. (71) of arXiv:1012.1549
  DeltaPhiDot = Br * omegar * sin(phir) / (2* r0 * Omega0);  // Eq. (73) of arXiv:1012.1549

  //// Return the measured eccentricity
  return -Br / (r0 * omegar);
}
예제 #14
0
MatrixXd DoPCA( MatrixXd &model ){

	int N = ( int )model.cols();
	MatrixXd avg( model.rows(), 1 );

	for( int i = 0; i < avg.rows(); ++i ){
		avg( i ) = model.row( i ).mean();
	}

	for( int i = 0; i < avg.cols(); ++i ){
		model.col( i ) -= avg;
	}

	JacobiSVD< MatrixXd > svd( model.transpose(), Eigen::ComputeThinU | Eigen::ComputeThinV );

	return svd.matrixV();
}
예제 #15
0
파일: rbtree.cpp 프로젝트: hellcoderz/ADS
 ///driver function to generate, insert and search rb hash tree
 void random_runner() {
     clock_t start, end;
     double insert_array[10], search_array[10];
     for ( int i = 0; i < 10; i++ ) {
         generate_random();
         start = ((double)clock()*1000)/CLOCKS_PER_SEC;
         insert_random();
         end = ((double)clock()*1000)/CLOCKS_PER_SEC;
         insert_array[i] = end - start;
         start = ((double)clock()*1000)/CLOCKS_PER_SEC;
         search_random();
         end = ((double)clock()*1000)/CLOCKS_PER_SEC;
         search_array[i] = end - start;
         make_root_null();
     }
     cout << avg ( insert_array ) << " " <<  avg ( search_array ) << endl;    
 }
예제 #16
0
 void testRunningAverage()
 {
     std::cerr << "Starting Aut::testRunningAverage()\n";
     
     RunningAverage<float> avg(3, std::chrono::milliseconds(750));
     assert (avg.capacity() == 3);
     assert (avg.window() == std::chrono::milliseconds(750));
     
     // Without assuming what kind of average Aut::RunningAverage implements
     // (e.g., it might be weighted or not) we can still test that the
     // running average of one number added multiple times is that number.
     
     avg.add(10.0);
     assert (avg() == 10.0);
     avg.add(10.0);
     assert (avg() == 10.0);
     avg.add(10.0);
     assert (avg() == 10.0);
     avg.add(10.0);
     assert (avg() == 10.0);
     avg.add(11.0);
     assert (avg() != 10.0);
     
     // But if we wait longer than time window and add a different number,
     // then the running average should ignore all the previous additions
     // and return just the new number.
     
     std::this_thread::sleep_for(std::chrono::seconds(2));
     avg.add(12.0);
     assert (avg() == 12.0);
     
     std::cerr << "ok\n";
 }
예제 #17
0
파일: Part4.cpp 프로젝트: hanshell/TDT4102
void testFunction(){
    assert(sameCase('a', 'b'));
    assert(!(sameCase('a', 'B')));
    assert(sameCase('A','B'));
    assert(numberOfDigits(123)==3);
    assert(numberOfDigits(123456)==6);
    assert(!(numberOfDigits(123)==5));
    assert(fabs(avg(30, 40)-((30+40)/2)<0.0000001));
}
예제 #18
0
double var(double *x, int n) {
    double x_avg = avg(x, n);
    double sum = 0.0;
    for (int i = 0; i < n; i++) {
        double dx = x[i] - x_avg;
        sum += dx * dx;
    }
    return (sum / n);
}
예제 #19
0
	void PCPolyhedron::unifyVertexs() {
		vertexs.clear();

		struct VertexInPCPolygon
		{
			VertexInPCPolygon(PCPolygon* pcp, int vertex) : pcp(pcp), vertex(vertex) { }
			PCPolygon*		pcp;
			int				vertex;
		};
		vector<VertexInPCPolygon> updateVertexs;

		for (vector<PCPolygonPtr>::iterator nextIter = pcpolygons.begin(); nextIter != pcpolygons.end();) {
			vector<PCPolygonPtr>::iterator iter = nextIter++;
			Polygon* polygon = (*iter)->getPolygonModelObject();

			if (polygon == NULL) {
				// No model object is available yet, quit!
				return;
			}

			for (int j = 0; j < polygon->getMathModel().getVertexs().size(); j++) {
				updateVertexs.clear();
				VertexInPCPolygon vpp(iter->get(), j);
				updateVertexs.push_back(vpp);
				ofVec3f v(polygon->getMathModel().getVertexs()[j]);

				for (vector<PCPolygonPtr>::iterator iter2 = iter; iter2 != pcpolygons.end(); iter2++) {
					Polygon* polygon2 = (*iter2)->getPolygonModelObject();
					for (int k = 0; k < polygon2->getMathModel().getVertexs().size(); k++) {
						ofVec3f v2(polygon2->getMathModel().getVertexs()[k]);
						if (!(v == v2)
							&& polygon->getMathModel().getVertexs()[j].distance(polygon2->getMathModel().getVertexs()[k]) <= Constants::OBJECT_VERTEX_UNIFYING_DISTANCE()) {
							VertexInPCPolygon vpp2(iter2->get(), k);
							updateVertexs.push_back(vpp2);
						}
					}
				}

				if (updateVertexs.size() > 1) {
					ofVec3f avg(0, 0, 0);
					for (int i = 0; i < updateVertexs.size(); i++) {
						avg += updateVertexs.at(i).pcp->getPolygonModelObject()->getMathModel().getVertexs()[updateVertexs.at(i).vertex];
					}
					avg /= updateVertexs.size();
					for (int i = 0; i < updateVertexs.size(); i++) {
						updateVertexs.at(i).pcp->getPolygonModelObject()->setVertex(updateVertexs.at(i).vertex, avg);
						//vx.Polygons.push_back(PCPolygonPtr(updateVertexs.at(i).pcp));
					}
					this->vertexs.push_back(avg);
					//vx.setPoint(avg);
					//vertexs.push_back(vx);
				}
			}
		}
			saveCloud("UnifiedVertex.pcd", vertexs);

	}
예제 #20
0
Vector3<float> Drive::averageAccelerometer() {
	Vector3<float> avg(0.0f, 0.0f, 0.0f);
	for (int i = 0; i < mSmoothing; ++i)
		avg += mAccelValue[i];
	avg.x /= mSmoothing;
	avg.y /= mSmoothing;
	avg.z /= mSmoothing;

	return avg;
}
예제 #21
0
Duration MultiplexedSocket::averageReceiveLatency() const {
    Duration avg(Duration::zero());

    uint32 nsockets = (uint32)mSockets.size();
    for(uint32 ii = 0; ii < nsockets; ++ii) {
        avg += mSockets[ii].averageReceiveLatency();
    }

    return avg / (float)nsockets;
}
예제 #22
0
파일: list.c 프로젝트: GabrielLurie/ListC
double avg(List *l,int sum,int lgth){
	if(l->next->next ==NULL){
		//printf("I am here: %d %f ||||| %d ",lgth,(sum+l->info))/((double)(lgth+1),l->info);
		//printf("here %lf ||| %d",(double)(sum+l->info+l->next->info)/(double)(lgth+2),l->info);
		return (sum+l->info+l->next->info)/(lgth+2);
	          
	}
	
		      return avg(l->next,sum+(l->info),lgth+1);
}
예제 #23
0
파일: PPCA.cpp 프로젝트: Tarekz1/Algs
void PPCA::center(){

	for(int i=0; i<data.rows(); i++){
	double av = avg(data, i);
	for(int j=0; j<data.cols(); j++){
	data(i,j).x -= av;
	}
	}

}
예제 #24
0
int main() {
    int x, y;
    
    puts("Enter the first number:");
    scanf("%d", &x);
    puts("Enter the second number:");
    scanf("%d", &y);
    printf("The average is %.2f\n", avg(x,y));
    return 0;
}
예제 #25
0
Vector3<float> Drive::averageGyroscope() {
	Vector3<float> avg(0.0f, 0.0f, 0.0f);
	for (int i = 0; i < mSmoothing; ++i)
		avg += mGyroValue[i];
	avg.x /= mSmoothing;
	avg.y /= mSmoothing;
	avg.z /= mSmoothing;

	return avg;
}
예제 #26
0
int main(void) {
  float src[64], dstv[64], dsts[64];
  int i;
  for(i=0; i<64; ++i)
    src[i] = i-32;
  zlimit (0, src, dsts, 64);
  zlimit (1, src, dstv, 64);
  for (i = 0; i < 64; ++i)
    assert(dstv[i] == dsts[i]);

  uint8_t srci_a[16], srci_b[16], dstvi[16], dstsi[16];
  for(i=0; i<16; ++i)  {
    srci_a[i] = i;
    srci_b[i] = i+10;
  }
  avg (0, srci_a, srci_b, dstsi);
  avg (1, srci_a, srci_b, dstvi);
  for(i=0; i<16; ++i)
    assert(dstvi[i] == dstsi[i]);
}
예제 #27
0
void naive_smooth(int dim, pixel *src, pixel *dst){
    int i, j;

    for (i = 0; i < dim; i++) 
      {
        for (j = 0; j < dim; j++)
          {
           dst[i*dim+j] = avg(dim, i, j, src);
          }
     }
}
auto_ptr<GridDensityProvider>
HeuristicGridDensityProviderFactory::newGridDensityProvider(OccluderSource& source, const real proscenium[4])
{
	auto_ptr<AverageAreaGridDensityProvider> avg(new AverageAreaGridDensityProvider(source, proscenium, sizeFactor));
	auto_ptr<Pow23GridDensityProvider> p23(new Pow23GridDensityProvider(source, proscenium, numFaces));
	if (avg->cellSize() > p23->cellSize()) {
		return (auto_ptr<GridDensityProvider>) p23;
	}
	else {
		return (auto_ptr<GridDensityProvider>) avg;
	}
}
예제 #29
0
파일: demo.cpp 프로젝트: piratf/DataMining
void inline unitTestKMeansRandomly(Group &test, std::ofstream &output) {
    // 数据归一化
    // normaliztion(test);

    // 输出读入的数据
    // puts("Print Input Data:");
    // puts("=====================================");
    // test.display();
    // puts("=====================================\n");

    // k 值
    const unsigned k = 3;

    /** 准备测试数据 */
    // KMeans++
    // std::vector<Group> centroid = buildInitialPointRandomly(k, test);
    // Kmeans + Density initialize
    // std::vector<Group> centroid = buildInitialPointDensity(k, test);
    // KMeans
    // std::vector<Group> centroid = buildInitialPoint(k, test);

    output << "===============================================" << std::endl;
    output << "buildInitialPointRandomly" << std::endl;
    output << "===============================================" << std::endl;
    // 重复运行测试
    std::vector<Group> result;
    std::vector<double> avg(k);
    double SSE = 0;
    // 记录每次的 SSE 值
    std::vector<double> vecSSE;
    time_t start = std::clock();
    // 重复实验的次数
    for (unsigned i = 0; i < TIMES; ++i) {
        printf("running: %d\r", i);
        result = KMeans(test, k, buildInitialPointRandomly(k, test), false);
        SSE = 0;
        for (unsigned j = 0; j < result.size(); ++j) {
            SSE += result[j].getSumOfEuclideanDistance();
            vecSSE.push_back(SSE / result.size());
        }
    }
    time_t end = std::clock();
    output << "The average of SSE = " << getAverage(vecSSE) << std::endl;
    output << "The variance of SSE = " << getVariance(vecSSE) << std::endl;
    output << "The running time is: " << double(end - start) / CLOCKS_PER_SEC << std::endl;
    // printf("The average of SSE = %lf\n", getAverage(vecSSE));
    // printf("The variance of SSE = %lf\n", getVariance(vecSSE));
    printf("the running time is : %f\n", double(end - start) / CLOCKS_PER_SEC);
    output << "===============================================" << std::endl;
    // puts("===============================================");
    // KMedoids(test, k, centroid);
}
예제 #30
0
void smooth5(int dim, pixel *src, pixel *dst) 
{
    int i, j, ii;

    for (i = 0; i < dim; i+=8)
    {
        for (j = 0; j < dim; j++)
        {
            for(ii = 0; ii<8; ii++)
                    dst[RIDX(i+ii, j, dim)] = avg(dim, i+ii, j, src);
        }
    }
}