예제 #1
0
static void do_stuff(void)
{
	//int m = 7;
	int m = 3;
	int n = 3;
	double a[n*m], d[n], u[m*m], v[n*n], dmat[n*m];

	// build and print a matrix of random numbers
	FORI(n*m) a[i] = randombounds(10, 99);
	PMATRIX(a, m, n);

	// compute the SVD
	int r = svd(d, a, u, m, v, n);

	// show the results
	FORI(n*m) dmat[i] = 0;
	FORI(n) dmat[n*i+i] = d[i];
	PMATRIX(dmat, m, n);
	PMATRIX(u, m, m);
	PMATRIX(v, n, n);

	// check the reconstruction
	double ud[m*n], udv[m*n];
	rmmult(ud, u, dmat, m, m, n);
	trnm(v,n);
	rmmult(udv, ud, v, m, n, n);
	PMATRIX(udv, m, n);
}
예제 #2
0
파일: ransac.c 프로젝트: jguinet/s2p
// fisher-yates
void shuffle(void *t, int n, size_t s)
{
	char *c = t;

	for (int i = 0; i < n-1; i++)
		swap(c + s*i, c + s*randombounds(i, n-1), s);
}
예제 #3
0
int randombounds(int a, int b)
{
	if (b < a)
		return randombounds(b, a);
	if (b == a)
		return b;
	return a + rand()%(b - a + 1);
}
예제 #4
0
파일: random.c 프로젝트: mnhrdt/imscript
static int randombounds(int a, int b)
{
	if (b < a)
		return randombounds(b, a);
	if (b == a)
		return b;
	return a + lcg_knuth_rand() % (b - a + 1);
}
예제 #5
0
static float float_pick(float *x, int n)
{
	if (n) {
		int i = randombounds(0, n-1);
		return x[i];
	}
	else
		fail("empty list of pixel values!");
}
예제 #6
0
static void statistics_getf_spoilable(struct statistics_float *s, float *f,
		int n)
{
	s->middle = f[n/2-1];
	int mt = STATISTIC_MEDIAN_BIAS;
	int mi = STATISTIC_MIDDLE_BIAS;
	switch(mi)
	{
		case -1: break;
		case 0: s->middle += f[n/2]; s->middle /=2; break;
		case 1: s->middle = f[n/2]; break;
		default: error("bad STATISTIC_MEDIAN_BIAS %d", mt);
	}
	//
	qsort(f, n, sizeof*f, compare_floats);
	s->min = f[0];
	s->max = f[n-1];
	s->median = f[n/2-1];
	if (EVENP(n))
	{
		int mtype = STATISTIC_MEDIAN_BIAS;
		switch(mtype)
		{
			case -1: break;
			case 0: s->median += f[n/2]; s->median /=2; break;
			case 1: s->median = f[n/2]; break;
			default: error("bad STATISTIC_MEDIAN_BIAS %d", mtype);
		}
	}
	s->average = 0;
	for (int i = 0; i < n; i++)
		s->average += f[i];
	s->average /= n;
	s->laverage = 0;
	for (int i = 0; i < n; i++)
		s->laverage += exp(f[i]/255);
	s->laverage = log(s->laverage/n)*255;
	s->variance = 0;
	for (int i = 0; i < n; i++)
		s->variance = hypot(s->variance, s->average - f[i]);
	s->sample = f[randombounds(0, n-1)];
}
예제 #7
0
파일: morphoop.c 프로젝트: mnhrdt/s2p
float op_random(float* data, int N){
   return data[randombounds(0, N-1)];
}