@@ -1235,11 +1235,13 @@ def _fit(self, dataset):
12351235
12361236 del ma_values
12371237
1238- iter_df , voxel_ijk , permutation_args , rand_idx = self ._prepare_permutations (self .n_iters )
1238+ iter_df , voxel_ijk , permutation_args , sampled_voxel_idx = self ._prepare_permutations (
1239+ self .n_iters
1240+ )
12391241 exceedance_counts = np .zeros (stat_values .shape [0 ], dtype = np .uint32 )
12401242
12411243 for iter_values in self ._iterate_permuted_stats (
1242- rand_idx , voxel_ijk , iter_df , permutation_args , self .n_cores
1244+ sampled_voxel_idx , voxel_ijk , iter_df , permutation_args , self .n_cores
12431245 ):
12441246 exceedance_counts += iter_values >= stat_values
12451247
@@ -1274,8 +1276,8 @@ def _prepare_permutations(self, n_iters):
12741276 iter_df = self .inputs_ ["coordinates" ].copy ()
12751277 voxel_ijk = mm2vox (self .xyz , self .masker .mask_img .affine ).astype (np .int32 , copy = False )
12761278 permutation_args = self ._prepare_permutation_args (iter_df )
1277- rand_idx = np .random .choice (voxel_ijk .shape [0 ], size = (iter_df .shape [0 ], n_iters ))
1278- return iter_df , voxel_ijk , permutation_args , rand_idx
1279+ sampled_voxel_idx = np .random .choice (voxel_ijk .shape [0 ], size = (iter_df .shape [0 ], n_iters ))
1280+ return iter_df , voxel_ijk , permutation_args , sampled_voxel_idx
12791281
12801282 def _prepare_permutation_args (self , coordinates ):
12811283 """Prepare static ALE kernel inputs for SCALE permutations."""
@@ -1328,12 +1330,12 @@ def _scale_to_p(self, stat_values, scale_values):
13281330 z_values = p_to_z (p_values , tail = "one" )
13291331 return p_values , z_values
13301332
1331- def _run_permutation (self , iter_idx , voxel_ijk , iter_df , permutation_args = None ):
1332- """Run a single random SCALE permutation of a dataset ."""
1333+ def _run_permutation (self , sampled_voxel_idx , voxel_ijk , iter_df , permutation_args = None ):
1334+ """Run a single random SCALE permutation from sampled voxel-row indices ."""
13331335 if permutation_args is not None :
13341336 ma_values , _ , _ = compute_ale_ma (
13351337 self .masker .mask_img ,
1336- voxel_ijk [iter_idx , :],
1338+ voxel_ijk [sampled_voxel_idx , :],
13371339 kernel = permutation_args ["kernel" ],
13381340 exp_idx = permutation_args ["exp_idx" ],
13391341 sample_sizes = permutation_args ["sample_sizes" ],
@@ -1342,16 +1344,20 @@ def _run_permutation(self, iter_idx, voxel_ijk, iter_df, permutation_args=None):
13421344 return _compute_ale_summarystat (ma_values )
13431345
13441346 iter_df = iter_df .copy ()
1345- iter_df [["i" , "j" , "k" ]] = voxel_ijk [iter_idx , :]
1347+ iter_df [["i" , "j" , "k" ]] = voxel_ijk [sampled_voxel_idx , :]
13461348 stat_values = self ._compute_summarystat_est (iter_df )
13471349 return stat_values
13481350
1349- def _iterate_permuted_stats (self , rand_idx , voxel_ijk , iter_df , permutation_args , n_cores ):
1351+ def _iterate_permuted_stats (
1352+ self , sampled_voxel_idx , voxel_ijk , iter_df , permutation_args , n_cores
1353+ ):
13501354 """Yield permuted SCALE statistic maps for a fixed permutation schedule."""
13511355 if n_cores == 1 :
1352- for i_iter in tqdm (range (rand_idx .shape [1 ]), total = rand_idx .shape [1 ]):
1356+ for i_iter in tqdm (
1357+ range (sampled_voxel_idx .shape [1 ]), total = sampled_voxel_idx .shape [1 ]
1358+ ):
13531359 yield self ._run_permutation (
1354- rand_idx [:, i_iter ],
1360+ sampled_voxel_idx [:, i_iter ],
13551361 voxel_ijk ,
13561362 iter_df ,
13571363 permutation_args = permutation_args ,
@@ -1365,14 +1371,14 @@ def _iterate_permuted_stats(self, rand_idx, voxel_ijk, iter_df, permutation_args
13651371 yield from tqdm (
13661372 Parallel (** parallel_kwargs )(
13671373 delayed (self ._run_permutation )(
1368- rand_idx [:, i_iter ],
1374+ sampled_voxel_idx [:, i_iter ],
13691375 voxel_ijk ,
13701376 iter_df ,
13711377 permutation_args = permutation_args ,
13721378 )
1373- for i_iter in range (rand_idx .shape [1 ])
1379+ for i_iter in range (sampled_voxel_idx .shape [1 ])
13741380 ),
1375- total = rand_idx .shape [1 ],
1381+ total = sampled_voxel_idx .shape [1 ],
13761382 )
13771383
13781384 def correct_fwe_montecarlo (
@@ -1403,12 +1409,16 @@ def correct_fwe_montecarlo(
14031409 )
14041410
14051411 stat_values = result .get_map ("stat" , return_type = "array" )
1406- iter_df , voxel_ijk , permutation_args , rand_idx = self ._prepare_permutations (n_iters )
1412+ iter_df , voxel_ijk , permutation_args , sampled_voxel_idx = self ._prepare_permutations (
1413+ n_iters
1414+ )
14071415 fwe_voxel_max = np .empty (n_iters , dtype = DEFAULT_FLOAT_DTYPE )
14081416 n_cores = _check_ncores (n_cores )
14091417
14101418 for i_iter , iter_values in enumerate (
1411- self ._iterate_permuted_stats (rand_idx , voxel_ijk , iter_df , permutation_args , n_cores )
1419+ self ._iterate_permuted_stats (
1420+ sampled_voxel_idx , voxel_ijk , iter_df , permutation_args , n_cores
1421+ )
14121422 ):
14131423 fwe_voxel_max [i_iter ] = np .max (iter_values )
14141424
0 commit comments