Skip to content

Commit

Permalink
ENH: simlify implementation of pseudo-random number generation
Browse files Browse the repository at this point in the history
  • Loading branch information
nno committed Apr 2, 2017
1 parent 35c3717 commit 31dc383
Showing 1 changed file with 21 additions and 12 deletions.
33 changes: 21 additions & 12 deletions tests/cosmo_montecarlo_phase_stat.m
Expand Up @@ -93,8 +93,9 @@

permuter_func=opt.permuter_func;
if isempty(permuter_func)
opt.permuter_func=get_default_permuter_func(nsamples,...
opt.niter,opt.seed);
opt.permuter_func=@(iter)default_permute(nsamples,...
opt.seed,opt.niter,...
iter);
end

zscore_func=get_zscore_func(opt.zscore);
Expand Down Expand Up @@ -152,8 +153,9 @@
niter=opt.niter;
for iter=1:niter
ds_null=ds;
sample_idxs=opt.permuter_func(iter);

ds_null.sa.targets=ds.sa.targets(opt.permuter_func(iter));
ds_null.sa.targets=ds.sa.targets(sample_idxs);
stat_null=cosmo_phase_stat(ds_null,opt);

msk_gt=stat_orig.samples>stat_null.samples;
Expand All @@ -178,18 +180,25 @@



function func=get_default_permuter_func(nsamples,niter,seed)
if isempty(seed)
args={};
else
args={'seed',seed};
end
function idxs=default_permute(nsamples,seed,niter,iter)
persistent cached_args;
persistent cached_rand_vals;

rand_vals=cosmo_rand(nsamples,niter,args{:});
[unused,idxs]=sort(rand_vals);
func=@(iter)idxs(:,iter);
args={nsamples,seed,niter,iter};
if ~isequal(cached_args,args)

if isempty(seed)
rand_args={};
else
rand_args={'seed',seed};
end

% compute once for all possible iterations
cached_rand_vals=cosmo_rand(nsamples,niter,rand_args{:});
cached_args=args;
end

[unused,idxs]=sort(cached_rand_vals(:,iter));



Expand Down

0 comments on commit 31dc383

Please sign in to comment.