指数分布に属する乱数を生成したい。私はこれを書きました
int size = atoi(argv[2]);
double *values = (double*)malloc(sizeof(double)*size);
double gamma = atof(argv[1]);
if(gamma<=0.0){
cout<<"Insert gamma"<<endl;
return 0;
}
for(int i=0; i<size; i++){
values[i]=0;
}
srand ( time(NULL) );
for(int i=0; i<size; i++){
x = ((double) rand() / (RAND_MAX));
//cout << random <<endl;
value=(log(1.0-x)/(-gamma));
//count each value
values[value]=values[value]+1.0;
}
しかし、ベクトルのすべてのサイズをカバーしているわけではありません。多かれ少なかれそれらはベクトルの 10% をカバーし、他のフィールドはすべて 0 であり、線形補間を行う必要があるため、それぞれに少なくとも 1 つの値を持たせるために、これらの「空のスペース」を減らしたいと考えています。配列のセル、どうすればできますか? たとえば、100000 のベクトルがある場合、最初の 60 フィールドのみに値が入力されるため、60 から 999999 までのセルはすべて 0 になり、線形回帰を実行すると、式に悪影響を及ぼします。