a***r 发帖数: 420 | 1 其实以前我没问过
不过考古发现众多此类话题的遗迹,我景仰的songkun,dashagen,bullren等前辈纷纷
留下墨宝,甚至竟然还有陈大师的高见(一年多前的贴啊,伤不起!!!)
可惜还是没搞定><,只好再问了
我有n的subject,想从中取q%个,(nq/100取整)
sas里可以surveyselect
r里可以sample (r真好。。。)
在C/C++里怎么实现呢??
因为dataset太大,用R和sas都不可行
Typically,我想做的是
#
...
main (int argc,char * argv[]) {
int arg=0;
n=atoi(argv[++arg]);
p=atoi(argv[++arg]);
double AOD;
srand((unsigned)time(NULL));
for (int i =0; i
{
AOD=((double) rand() / (RAND_MAX+1)) ;
if (AOD
do something I need to matrix[i];
}
}
std::cin.ignore( std::numeric_limits::max(), '\n' );
return(0);
}
这样不行,因为我不能控制选到的个数
还有其实我不确定这样生成的数是不是uniform的
我想做的实际就是产生一个选中的index list,然后对matrix[index]做操作
骨灰贴里bullren问了这个问题之后,很happy地说最后借用了R的code
可是我很挫的没有找到R的runif()或者sample()的source code
所以,idea/reference, are all sincerely appreciated!
谢谢大家啦~~ |
g**********t 发帖数: 475 | |
b*****n 发帖数: 685 | 3 居然提了老夫的名,那老夫就回一下。
我猜你要实现类似于R里面的sample,比如5个里面取2个:
> sample(5, 2)
[1] 1 3
就可以得到index了。
如果你要借用R的function,那些source code需要从cran R Sources上面down。
其实这种情况用C很容易实现,做两次loop,第一次从5个里面随机取一个,第二次再从
剩下4个里面随机取一个(如果是without replacement的话)。只不过这么做仅限于等
概率的sample,也就是R的sample里面prob = NULL的case。 |
o****o 发帖数: 8077 | 4 maybe this like helps:
http://www.mitbbs.com/bbsann2/life.faq/JobHunting/17/D128425435
【在 a***r 的大作中提到】 : 其实以前我没问过 : 不过考古发现众多此类话题的遗迹,我景仰的songkun,dashagen,bullren等前辈纷纷 : 留下墨宝,甚至竟然还有陈大师的高见(一年多前的贴啊,伤不起!!!) : 可惜还是没搞定><,只好再问了 : 我有n的subject,想从中取q%个,(nq/100取整) : sas里可以surveyselect : r里可以sample (r真好。。。) : 在C/C++里怎么实现呢?? : 因为dataset太大,用R和sas都不可行 : Typically,我想做的是
|
a***r 发帖数: 420 | 5 上次没来得及回复
谢谢,非常有帮助!!
http://www.mitbbs.com/bbsann2/life.faq/JobHunting/17/D128425435
348717_2.70/%C7%B0%B6%CE%CA%B1%BC%E4%D5%FB%C0%ED%B5%C4%CB%E6%BB%FA%CB%E3%B
7%A8
【在 o****o 的大作中提到】 : maybe this like helps: : http://www.mitbbs.com/bbsann2/life.faq/JobHunting/17/D128425435
|
a***r 发帖数: 420 | 6 嗯哪,懂了
主要在这个概念上当时没转过弯:
uniformly sampling from a finite population without replacement
marginal distribution of samples is still uniform
谢啦~
【在 b*****n 的大作中提到】 : 居然提了老夫的名,那老夫就回一下。 : 我猜你要实现类似于R里面的sample,比如5个里面取2个: : > sample(5, 2) : [1] 1 3 : 就可以得到index了。 : 如果你要借用R的function,那些source code需要从cran R Sources上面down。 : 其实这种情况用C很容易实现,做两次loop,第一次从5个里面随机取一个,第二次再从 : 剩下4个里面随机取一个(如果是without replacement的话)。只不过这么做仅限于等 : 概率的sample,也就是R的sample里面prob = NULL的case。
|